Matlab标记点

时间:2013-04-12 15:24:33

标签: matlab graph plot matlab-figure

我需要在下图中标出一点:
enter image description here

特别是,我需要将红线标记为25,并且它对应的y轴值。我该怎么做?

我试过看over here但是我并没有真正理解这个解决方案(那个代码到底在做什么?)但是我不知道我是否想要那个。我想要更多带坐标的斜线,有点像这样:

    (2,5)
   /
  /
 /
/

我该怎么做?

2 个答案:

答案 0 :(得分:3)

使用textarrow类型的ANNOTATION。以下是文档中的示例:

plot(1:10);
a = annotation('textarrow', [.3 .5], [.6 .5], 'String' , 'Straight Line');

enter image description here


修改

请注意,annotation要求标准化图形单位(nfu)中的坐标与轴单位不同。要从轴单位转换为nfu,我喜欢使用DS2NFU FileExchange sumbission。

以下是使用来自@gnovice的链接问题和答案的示例。

X = [21 8 2 1 0];
Y = [0 1 2 3 4];
plot(X,Y,'k-s')
strValues = strtrim(cellstr(num2str([X(:) Y(:)],'(%d,%d)')));
% where the arrow should go from
gapx = 1; 
gapy = 0.1;
% axes limits
xl = xlim;
yl = ylim;

for k=1:numel(X)
    % convert X and Y coordinates to figure units
    pos = ds2nfu([X(k), Y(k), gapx, gapy]);
    if X(k)+gapx < xl(2)
        posx = [pos(1)+pos(3) pos(1)];
    else
        posx = [pos(1)-pos(3) pos(1)];
    end
    if Y(k)+gapy < yl(2)
        posy = [pos(2)+pos(4) pos(2)];
    else
        posy = [pos(2)-pos(4) pos(2)];
    end

    annotation('textarrow',posx,posy,'String',strValues{k});
end

enter image description here

答案 1 :(得分:1)

这主要是yuk已经完整答案的附属品。事实证明,Matlab附带了一个执行轴的工具 - &gt;图坐标转换。请参阅http://www.mathworks.com/help/matlab/creating_plots/positioning-annotations-in-data-space.html上的讨论。此页面还包含使用“textarrow”注释的示例。


TL; DR:

addpath([docroot '/techdoc/creating_plots/examples'])

公开一个名为dsxy2figxy的函数。


使用示例:

%Perform the addpath (this is relativly slow, try to only do it once.)
addpath([docroot '/techdoc/creating_plots/examples'])  %Needed for dsxy2figxy

%Create some figure to look at
figure(219376); clf
x = linspace(0.8, 40, 1000);
y = 1./x;
plot(x,y, 'b-')
hold on

%Mark position 100
tipXy  = dsxy2figxy(gca, x(100),   y(100));
tailXy = dsxy2figxy(gca, mean(x), mean(y));
h = annotation('textarrow', [tailXy(1) tipXy(1)], [tailXy(1) tipXy(1)],...
    'String',['  (' num2str(x(100)) ',' num2str(x(100)) ')']);