在 Matlab GUI 中设置地图轴的父级



我正在利用映射工具箱的MATLAB中编写一个基本的GUI。GUI 将显示灰度图像,然后在数据上绘制离散点,所有这些都在必要的地图投影上绘制。重要的是,我绘制在地图轴(由 axesm 命令创建的轴)上,而不是在香草笛卡尔空间上。我从命令行完成所有这些操作没有问题,但是我找不到实现GUI版本的方法,这让我发疯。

问题是我需要将地图轴指定为父图形的子项。普通轴具有可以设置的属性,如下所示:

axesHandle = axes('Parent', parentHandle, ...);

set(axesHandle, 'Parent', parentHandle);

但是,由 axesm 函数创建的地图轴没有等效的父属性,因此我无法操作图中的轴。我该怎么做?


更新:如果我在空图中的地图轴内创建一个绘图,get(figureHandle,'Children')返回轴m对象的句柄(感谢@slayton!),因此必须通过MATLAB将地图轴对象隐式添加到图形的子项中。

我应该担心地图轴不引用父图形,还是应该让它参考?我想知道这是否是 MATLAB 迫使我不遵守手册告诉我要实施的标准的经典案例。

通过阅读您的问题,我认为您要做的是抓住轴对象的手柄。 这可以通过使用轴或子图创建轴时完成

a = axes();
a = subplot(x,y,z);
% both return an handle to the newly created axes object

此外,如果轴是通过函数调用(如 plotimage)自动创建的,您也可以获得轴句柄:

p = plot(1:10); %returns a handle to a line object
a = get(p,'Parent');
i = image(); %returns a handle to an image object
a = get(i, 'Parent');

最后,这两个选项都不可用,您始终可以从其包含图形中获取轴手柄:

a = get(figureHandle, 'Children');

请记住,如果您的图形包含多个轴,这将返回轴句柄的向量。

最后,当需要绘制时,

将点绘制到包含地图图像的轴上,您只需调用:

line(xPoints, yPoints, 'linestyle', 'none', 'marker', '.', 'color', 'r', 'size', 15)

这将使用大红点绘制线的顶点。

我不确定这是否回答了您的问题,因为您提供的代码与您提出的问题不一致。

提供的代码看起来像您正在尝试将轴从一个图形移动到另一个图形。你完全可以做到这一点!

f = figure('Position', [100 100 100 100]);
a = axes('Parent', f);
pause
f2 = figure('Position', [250 100 100 100]);
set(a,'Parent', f2);

经过多次试验和错误并阅读文档,我发现没有办法显式指定地图轴的父级。相反,它们隐式添加到当前轴的顶部。在当前图中不存在轴的实例中,调用 axesm 将创建一个 axes 对象,然后将 axesm 对象放在其中。当你采取这个路线时,你必须通过调用gca来获取轴对象句柄:

mapAxesHandle = axesm(...);
axesHandle = gca(...);

这使得在从头开始编写 GUI 时使用映射工具箱变得令人沮丧,但这就是 Mathworks 实现它的方式。感谢@slayton提供的有用信息。我会投赞成票,但我的声誉是 <15 :(

最新更新