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

时间:2012-06-21 15:13:31

标签: maps matlab matlab-guide

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

问题是我需要将地图轴指定为父图的子项。普通轴有一个可以设置的属性,例如:

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

set(axesHandle, 'Parent', parentHandle);

但是,axism函数创建的地图轴没有等效的父属性,因此我无法操纵图中的轴。我怎么能这样做?


更新:如果我在地图轴中创建一个空图中的图,get(figureHandle,'Children')返回axism对象的句柄(感谢@slayton!),因此必须隐式添加地图轴对象由MATLAB给这个图的孩子们。

我是否应该担心地图轴不会引用父图,或者我应该让它成为现实?我想知道这是否是MATLAB的经典案例,迫使我不遵守手册告诉我实施的标准。

2 个答案:

答案 0 :(得分:2)

从阅读你的问题我认为你想要做的就是抓住axis对象的句柄。这可以通过使用轴或子图

创建轴来完成
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);

答案 1 :(得分:0)

经过多次试验和错误以及阅读文档后,我发现没有办法明确指定地图轴的父级。相反,它们隐含地添加在当前轴之上。在当前图中不存在轴的情况下,调用axesm会创建一个轴对象,然后将axesm对象放入其中。采用此路线时,您必须通过调用gca

来获取轴对象句柄
mapAxesHandle = axesm(...);
axesHandle = gca(...);

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