首页 > 解决方案 > 在不等轴上绘制注释箭头

问题描述

这是我的问题的 MCVE:

ax = axes('XLim',[0 20],'YLim',[0 10]);
arrStart = [5 5];
arrLength = 3;
arrDir = pi/4:pi/3:2*pi;
arrEnd = [cos(arrDir)*arrLength+arrStart(1)
          sin(arrDir)*arrLength+arrStart(2)];
for k = 1:size(arrEnd,2)
    arr = annotation('arrow',...
        'X',[arrStart(1) arrEnd(1,k)],...
        'Y',[arrStart(2) arrEnd(2,k)]);
    arr.Parent = ax;
end

上面的代码创建了下图:

箭头

您可以很容易地看到没有一个箭头与其尾部正确对齐。经过对这个问题的一些研究,我发现它的原因是轴的长度不同(X 比 Y 长两倍)。因此,如果我将两个轴设置为相同的限制,问题就会消失:

箭头-2

但是在我制作的图中,它比这个例子复杂得多,我需要轴有不同的限制。

任何想法如何解决这个问题?

ps:使用“标准化”单位我没有看到这个问题,但是为箭头设置正确的位置很麻烦......

我正在使用 MatLab R2017a。

标签: matlabmatlab-figure

解决方案


注释适用于图形、uipanels 或 uitabs,而不是轴。将父级更改为轴可能不在该函数的预期使用范围内。我会按照评论中的建议使用文件交换中的一种替代方法在轴内创建箭头。

或者,您可以使用该quiver功能(但也可能不推荐):

figure;
ax = axes('XLim',[0 20],'YLim',[0 10]);
arrStart = [5 5];
arrLength = 3;
arrDir = pi/4:pi/3:2*pi;
arrEnd = [cos(arrDir)*arrLength+arrStart(1)
          sin(arrDir)*arrLength+arrStart(2)];
hold on;
for k = 1:size(arrEnd,2)
  quiver(arrStart(1), arrStart(2), arrEnd(1,k)-arrStart(1), arrEnd(2,k)-arrStart(2), 'Color', 'k', 'MaxHeadSize', 0.5, 'Autoscale', 'off');
end

使用 quiver 绘制的箭头


推荐阅读