你可以滥用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 的 5th 参数: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')
如果您不喜欢箭头,则需要返回注释,此答案可能会有所帮助:
How do I change the arrow head style in quiver plot?
关于 cmets 的一些说明:
箭头大小可以通过'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
给你非常相似的结果: