我正尝试在Matlab图形中绘制箭头,但没有成功。
代码示例:
function [ output_args ] = example( input_args )
figure ('Name', 'example');
x = [10 30]
y = [10 30]
xlim([1, 100])
ylim([1, 100])
arrow (x, y) ???
end
Matlab中是否有绘制箭头的函数?谢谢。
我正尝试在Matlab图形中绘制箭头,但没有成功。
代码示例:
function [ output_args ] = example( input_args )
figure ('Name', 'example');
x = [10 30]
y = [10 30]
xlim([1, 100])
ylim([1, 100])
arrow (x, y) ???
end
Matlab中是否有绘制箭头的函数?谢谢。
你可以使用 quiver
来避免使用 annotation
处理不便的标准化图形单位。
drawArrow = @(x,y) quiver( x(1),y(1),x(2)-x(1),y(2)-y(1),0 )
x1 = [10 30];
y1 = [10 30];
drawArrow(x1,y1); hold on
x2 = [25 15];
y2 = [15 25];
drawArrow(x2,y2)
函数quiver
的第5个参数非常重要:0表示禁用默认的缩放,因为该函数实际上是用于绘制向量场的。(或者使用属性-值对'AutoScale','off'
)
您还可以添加其他功能:
drawArrow = @(x,y,varargin) quiver( x(1),y(1),x(2)-x(1),y(2)-y(1),0, varargin{:} )
drawArrow(x1,y1); hold on
drawArrow(x2,y2,'linewidth',3,'color','r')
如果您不喜欢箭头,需要返回注释,以下答案可能会有帮助:
关于评论的一些说明:
箭头大小可以通过'MaxHeadSize'
属性进行调整,但不幸的是它并不一致。坐标轴限制需要在之后设置。
x1 = [10 30];
y1 = [10 30];
drawArrow(x1,y1,{'MaxHeadSize',0.8,'Color','b','LineWidth',3}); hold on
x2 = [25 15];
y2 = [15 25];
drawArrow(x2,y2,{'MaxHeadSize',10,'Color','r','LineWidth',3}); hold on
xlim([1, 100])
ylim([1, 100])
使用 sed 的解决方案 似乎是最好的,因为它提供了可调整的箭头头部。
我会把它包装成一个函数:
function [ h ] = drawArrow( x,y,xlimits,ylimits,props )
xlim(xlimits)
ylim(ylimits)
h = annotation('arrow');
set(h,'parent', gca, ...
'position', [x(1),y(1),x(2)-x(1),y(2)-y(1)], ...
'HeadLength', 10, 'HeadWidth', 10, 'HeadStyle', 'cback1', ...
props{:} );
end
您可以按照以下方式从脚本中调用它:
drawArrow(x1,y1,[1, 100],[1, 100],{'Color','b','LineWidth',3}); hold on
drawArrow(x2,y2,[1, 100],[1, 100],{'Color','r','LineWidth',3}); hold on
给您相当相似的结果:
xlim([1, 100]); ylim([1, 100])
。 - Robert Seifertdrawarrow
之后写入xlim
和ylim
,它将起作用。唯一的问题是,在我的视图中箭头看起来不够大... - bla'MaxHeadSize'
进行调整,参见编辑。 - Robert Seifertarrowsize=0.15*abs(diff(xlim).^2+dif(Ylim).^2)
。 - bla文件交换
中的arrow。 arrow(Start, Stop)
绘制一条从 Start 到 Stop 的带箭头的线段(点应为长度为2或3的向量,或具有2或3列的矩阵),并返回箭头的绘图句柄。
编辑:@Lama 也是正确的,你也可以使用 注释
, 但你需要考虑绘图限制。
annotation('arrow',x,y)
[xf yf]=ds2nfu(x,y);
annotation(gcf,'arrow', xf,yf)
请注意,有一些未记录的功能可以将注释固定到图表上,如果需要,请在此处阅读更多信息...除了其他解决方案外,这里介绍一种使用注释
的方法,您可以在其中设置箭头属性,包括(x、y、width和height)
在当前坐标轴内,以及头部和线条属性。
h=annotation('arrow');
set(h,'parent', gca, ...
'position', [50 5 20 2], ...
'HeadLength', 1000, 'HeadWidth', 100, 'HeadStyle', 'hypocycloid', ...
'Color', [0.4 0.1 0.8], 'LineWidth', 3);
提供
davinci( 'arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options> )