代码之家  ›  专栏  ›  技术社区  ›  Tim unnamed eng

Matlab绘图中的注释

  •  4
  • Tim unnamed eng  · 技术社区  · 15 年前

    我只是想知道如何在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),但是annotation将x和y的值解释为标准化的图形单位。所以我认为这就是问题的原因。如何指定要注释的正确坐标?

    3 回复  |  直到 9 年前
        1
  •  7
  •   Jonas    15 年前

    首先,需要以标准化的图形单位查找轴的位置。幸运的是,它们默认设置为“标准化”。

    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);
    

    使用x annotation和yannotation作为注释的x和y坐标。

        2
  •  4
  •   yuk    15 年前

    另一种获得标准化图形坐标的方法是使用 Data space to figure units conversion (ds2nfu) 在文件交换上提交。

    [xa ya] = ds2nfu(x,y);
    
        3
  •  1
  •   lokxs    9 年前

    我在理解标准化坐标时遇到了一些困难,直到我意识到坐标(0,0)和(1,1)分别是完整绘图窗口的左下角和右上角,而不仅仅是绘图窗口的左上角。下面的代码片段和屏幕截图可能会帮助那些一直想知道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])
    

    Plot with arrow coordinates (0,0) and (1,1)