我需要在下图中标出一点:
特别是,我需要将红线标记为25,并且它对应的y轴值。我该怎么做?
我试过看over here但是我并没有真正理解这个解决方案(那个代码到底在做什么?)但是我不知道我是否想要那个。我想要更多带坐标的斜线,有点像这样:
(2,5)
/
/
/
/
我该怎么做?
答案 0 :(得分:3)
使用textarrow
类型的ANNOTATION。以下是文档中的示例:
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
答案 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)) ')']);