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



我正在尝试在不同子画面中的图像之间画线。由于SO上的这个问题,基本想法是使用annotation

这是一个关于Mathworks文件交换的脚本,但它不适用于现代版本的MATLAB,也不适用于axis image

我自己找到了答案。

请参阅Mathworks文件交换中的此文件。

它需要大量棘手的计算和转换。由Benoît Valley 提供

首先,获取图形的配置,

% 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,请告诉我。

最新更新