我试图在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中是否有可以绘制箭头的函数? 感谢
答案 0 :(得分:45)
您可以滥用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 会禁用默认缩放,因为此函数实际上用于绘制矢量字段。 (或使用poperty值对'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')
如果你不喜欢箭头,你需要回到注释,这个答案可能会有所帮助:
How do I change the arrow head style in quiver plot?
关于评论的一些评论:
可以使用'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])
The solution by 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
给你非常相似的结果:
答案 1 :(得分:8)
您可以使用arrow
from the file exchange。 arrow(Start,Stop)
使用从开始到停止的箭头绘制一条线(点应为长度为2或3的向量,或具有2或3列的矩阵),并返回箭头的图形句柄。
编辑:@Lama也是对的,你可以使用annotation
但是你需要考虑情节限制。
annotation('arrow',x,y)
创建一个箭头注释对象,该对象从x(1),y(1)定义的点延伸到x(2),y(2)定义的点,以标准化数字单位。你可以使用 Data space to figure units conversion函数(ds2nfu.m)来自文件交换,让您的生活更轻松。
[xf yf]=ds2nfu(x,y);
annotation(gcf,'arrow', xf,yf)
请注意,如果需要,有一些未记录的功能允许将注释固定到图形上,请阅读更多相关信息here ...
答案 2 :(得分:6)
在其他解决方案中,这里有一个使用annotation
的解决方案,您可以在其中设置箭头属性,包括当前轴中的(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);
给出
答案 3 :(得分:6)
你可以使用(记录良好的)DaVinci Draw toolbox(完全披露:我写/出售工具箱,虽然箭头是免费的)。示例语法和示例输出如下。
davinci( 'arrow', 'X', [0 10], 'Y', [0 2], <plus-lots-of-options> )
答案 4 :(得分:2)