3

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

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

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

或者

set(axesHandle, 'Parent', parentHandle);

但是,axesm 函数创建的地图轴没有等效的父属性,因此我无法操作图中的轴。我怎样才能做到这一点?


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

我是否应该担心地图轴不参考父图形,还是应该顺其自然?我想知道这是否是 MATLAB 强迫我不遵守手册告诉我实施的标准的经典案例。

4

2 回答 2

2

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

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

此外,如果轴是通过函数调用自动创建的,plot或者image您也可以获取轴句柄:

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);
于 2012-06-21T15:35:59.827 回答
0

经过反复试验和阅读文档,我发现没有办法明确指定地图轴的父级。相反,它们被隐式添加到当前轴的顶部。在当前图形中不存在坐标区的情况下,调用axesm会创建一个坐标区对象,然后将坐标轴对象放入其中。当你走这条路时,你必须通过调用来获取轴对象句柄gca

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

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

于 2012-06-27T21:18:58.813 回答