微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法在不影响 uistack 排序的情况下更改 matlab 中的当前轴对象? 为什么有效

如何解决有没有办法在不影响 uistack 排序的情况下更改 matlab 中的当前轴对象? 为什么有效

Matlab 提供了一个名为 uistack 的函数,用于在深度方向排列 UI 对象(哪些对象在其他对象的前面等)。还有一个功能(轴)用于设置当前轴。我发现当我调用轴时,它还会自动将该轴对象放在所有其他对象(包括 uipanels 等)的前面。有什么办法可以避免这种情况吗?

这是一些说明我的问题的代码

figure(1)
clf

ax1 = axes();
set(ax1,'position',[.1 .1 .5 .5],'xtick',[],'ytick','color','r')

ax2 = axes();
set(ax2,[.3 .3 .5 .5],'b')

% blue (ax2) is on top since it was created after ax1

uistack(ax1,'top')

% red (ax1) is Now on top (good)

axes(ax2)

% [do some plotting or something in ax2]

% blue (ax2) is Now on top (I'd rather avoid this)

解决方法

要使 h_ax 成为图 h_fig 中的当前轴而不将这些轴放在前面,请使用:

set(h_fig,'CurrentAxes',h_ax)

为什么有效

来自axes函数的documentation,语法axes(cax)

使 cax 成为图形的 Children 属性中列出的第一个对象,并将图形的 CurrentAxes 属性设置为 cax

使 cax 成为 Children 属性中列出的第一个对象是导致它位于前面的原因。这可以通过修改该属性并查看效果来检查。此外,通过查看 uistack 的代码,可以看出该函数在内部执行的操作是重新排列图形的 Children 的顺序。

将图形的 CurrentAxes 属性设置为 cax 是导致这些轴成为当前轴的原因。这可以通过修改该属性、绘制某些内容并查看绘图出现在哪些轴上来检查。

因此,将图形的 CurrentAxes 属性设置为所需的轴即可实现所需的效果,而无需将这些轴移到前面。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。