我只是想知道如何在matlab中添加注释?这是我的代码:
plot(x,y);
annotation('textarrow',[x, x+0.05],[y,y+0.05],'String','my point','FontSize',14);
但箭头指向错误的地方。我该如何解决?还有更好的想法来注释情节吗?
谢谢和问候!
编辑:
我刚从帮助文档中看到:
注释('line',x,y)创建一个行注释对象,该对象从x(1),y(1)定义的点延伸到由x(2),y(2)定义的点,指定在标准化的数字单位。
在我的代码中,我希望箭头指向由plot()绘制的点(x,y),但是注释将x和y的值解释为标准化的图形单位。所以我认为这就是导致问题的原因。如何为注释指定正确的坐标?
答案 0 :(得分:7)
首先,您需要以标准化的数字单位找到轴的位置。幸运的是,它们默认设置为“标准化”。
axPos = get(gca,'Position'); %# gca gets the handle to the current axes
axPos是[xMin,yMin,xExtent,yExtent]
然后,你得到极限,即轴的最小值和最大值。
xMinMax = xlim;
yMinMax = ylim;
最后,您可以从图x和y计算注释x和y。
xAnnotation = axPos(1) + ((xPlot - xMinMax(1))/(xMinMax(2)-xMinMax(1))) * axPos(3);
yAnnotation = axPos(2) + ((yPlot - yMinMax(1))/(yMinMax(2)-yMinMax(1))) * axPos(4);
使用xAnnotation和yAnnotation作为注释的x和y坐标。
答案 1 :(得分:4)
获得规范化图形坐标的另一种方法是在FileExchange上使用Data space to figure units conversion (ds2nfu)提交。
[xa ya] = ds2nfu(x,y);
答案 2 :(得分:1)
我在理解标准化坐标时遇到了一些麻烦,直到我意识到坐标(0,0)和(1,1)分别是COMPLETE绘图窗口的左下角和右上角,而不仅仅是绘图。下面的代码片段和屏幕截图可能会帮助那些一直想知道0开始和1结束的人。
x = -1:0.1:1;
y = x.^2;
plot (x,y)
xlabel('time [s]')
ylabel('amplitude')
title('My nice plot')
legend('y(t)')
grid on
annotation('arrow', [0 1], [0 1])