【问题标题】:How to convert coordinate in subplot into figure coordinate?如何将子图中的坐标转换为图形坐标?
【发布时间】:2014-04-23 02:55:11
【问题描述】:

我正在尝试在不同子图中的图像之间画线。基本思想是使用annotation,感谢this question on SO。

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

【问题讨论】:

  • 只是出于好奇,为什么不使用 fig 编辑器手动进行呢?然后您可以“文件>生成代码”并在需要时将注释添加到您的代码中......
  • 好主意。但是我想以编程方式进行,因为有很多线条,如果我可以在鼠标事件上绘制这些线条会更酷。
  • 所以,问题是如何将坐标从子图转换为图形?如果是,我的第一次尝试是检查两个(轴和图形)的单位(像素等)。接下来是获取图中轴的位置...
  • 如果您遵循@natans 的建议,那么您只需执行一次文件-> 生成代码,然后您就可以轻松地创建一个函数等来重新使用它。有什么理由不工作吗?

标签: matlab plot drawing figure


【解决方案1】:

我自己找到答案。

请参阅this file on Mathworks file exchange。

它需要大量棘手的计算和转换。由 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,请告诉我。

【讨论】:

    猜你喜欢
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多