如何将子图中的坐标转换为图形坐标?

时间:2014-04-23 02:55:12

标签: matlab plot drawing figure

我试图在不同的子图中绘制图像。基本的想法是使用annotation,感谢this question on SO

这是Mathworks File Exchange上的一个脚本,但它不适用于现代版本的MATLAB,而不适用于axis image

1 个答案:

答案 0 :(得分:0)

我自己找到了答案。

请参阅this file on Mathworks file exchange

它要求进行许多令人讨厌的棘手计算和转换。由BenoîtValley提供

首先,获取图的配置,

% get axes properties
funit=get(get(h_axes,'Parent'),'Units');
% get axes properties
aunit=get(h_axes,'Units');
darm=get(h_axes,'DataAspectRatioMode');
pbarm=get(h_axes,'PlotBoxAspectRatioMode');
dar=get(h_axes,'DataAspectRatio');
pbar=get(h_axes,'PlotBoxAspectRatio');
xlm=get(h_axes,'XLimMode');
ylm=get(h_axes,'YLimMode');
xd=get(h_axes,'XDir');
yd=get(h_axes,'YDir');

% set the right units for h_axes
set(h_axes,'Units',funit);
axesoffsets = get(h_axes,'Position');

x_axislimits = get(h_axes, 'xlim');     %get axes extremeties.
y_axislimits = get(h_axes, 'ylim');     %get axes extremeties.
x_axislength = x_axislimits(2) - x_axislimits(1); %get axes length
y_axislength = y_axislimits(2) - y_axislimits(1); %get axes length

最后

xfigure = xab+xwb*(xaxes-x_axislimits(1))/x_axislength;

为什么我不使用生成代码?

Generate code给了我这样的东西:

% Create line
annotation(figure1,'line',[0.223214285714286 0.694642857142857],...
    [0.552380952380952 0.630952380952381]);

与现有的线,点或数字无关,更不用说未绘制的变量。所以基本上我正在寻找方法来获得annotation坐标中的那些点位置,这在上面的代码中处理。

如果我没有让你们知道如何使用generate code,请告诉我们。