matlab - 在不等轴上绘制注释箭头
问题描述
这是我的问题的 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 长两倍)。因此,如果我将两个轴设置为相同的限制,问题就会消失:
但是在我制作的图中,它比这个例子复杂得多,我需要轴有不同的限制。
任何想法如何解决这个问题?
ps:使用“标准化”单位我没有看到这个问题,但是为箭头设置正确的位置很麻烦......
我正在使用 MatLab R2017a。
解决方案
注释适用于图形、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
推荐阅读
- r - R中的金字塔形(非直角)堆积条形图
- javascript - 如何阻止函数多次执行?
- html - 如何在 IOS Safari 中覆盖 input[type="select"] 文本颜色
- c - 无法编译用 C 编写的 15 年以上的 MUD 代码库
- java - XMLEventReader 和 XMLEventWriter 在同一个文件上?
- ecmascript-6 - 什么是用于在箭头函数语法中显示格式化/实际箭头的 VSCODE 扩展/主题/符号集
- python - Plotly:如何在一个散点图上绘制多列?
- python - 如何通过查看 python 中文件名的最后一位来组织文件?
- java - 用户输入未在 logcat android studio 中显示
- excel - 从多个 excel 文件复制工作表并粘贴到新的 xlsx