我需要在以下图上标记一个点:
特别是,我需要在 25 处标记红线,它是对应的 y 轴值。我该怎么做呢?
我试着看这里,但我并没有真正理解解决方案(该代码到底在做什么??)但我不知道我是否想要那个。我想要更多带有坐标的斜线,有点像这样:
(2,5)
/
/
/
/
我该怎么做?
我需要在以下图上标记一个点:
特别是,我需要在 25 处标记红线,它是对应的 y 轴值。我该怎么做呢?
我试着看这里,但我并没有真正理解解决方案(该代码到底在做什么??)但我不知道我是否想要那个。我想要更多带有坐标的斜线,有点像这样:
(2,5)
/
/
/
/
我该怎么做?
使用类型的注释。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
这主要是对 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)) ')']);