1

我需要在以下图上标记一个点:
在此处输入图像描述

特别是,我需要在 25 处标记红线,它是对应的 y 轴值。我该怎么做呢?

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

    (2,5)
   /
  /
 /
/

我该怎么做?

4

2 回答 2

3

使用类型的注释textarrow这是文档中的一个示例:

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

在此处输入图像描述


编辑

请注意,这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

在此处输入图像描述

于 2013-04-12T15:29:07.770 回答
1

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


TL;博士:

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)) ')']);
于 2013-04-12T17:47:58.040 回答