有没有办法在不影响 uistack 顺序的情况下更改 matlab 中的当前轴对象?
Is there a way to change the current axes object in matlab without affecting the uistack ordering?
Matlab 提供了一个名为 uistack 的函数,用于在深度方向上排列 UI 个对象(哪些对象在哪些其他对象的前面,等等)。还有一个函数 (axes) 用于设置当前轴。我发现当我调用 axes 时,它还会自动将该 axes 对象放在所有其他对象(包括 uipanels 等)的前面。有什么办法可以避免这种情况吗?
这里有一些代码可以说明我的问题:
figure(1)
clf
ax1 = axes();
set(ax1,'position',[.1 .1 .5 .5],'xtick',[],'ytick',[],'color','r')
ax2 = axes();
set(ax2,'position',[.3 .3 .5 .5],'xtick',[],'ytick',[],'color','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)
makes cax
the first object listed in the Children
property of the figure and sets the CurrentAxes
property of the figure to cax
.
使 cax
在 Children
属性 中列出的第一个对象是导致它在前面的原因。这可以通过修改 属性 并查看效果来检查。此外,通过查看 uistack
的代码,可以看出该函数在内部执行的操作是重新排列图形 Children
.
的顺序
将图形的 CurrentAxes
属性 设置为 cax
是导致这些轴成为当前轴的原因。这可以通过修改属性、绘制一些东西并查看绘图出现在哪个轴上来检查。
因此,将图形的 CurrentAxes
属性 设置为所需的轴即可实现所需的效果,而无需将这些轴移到前面。
Matlab 提供了一个名为 uistack 的函数,用于在深度方向上排列 UI 个对象(哪些对象在哪些其他对象的前面,等等)。还有一个函数 (axes) 用于设置当前轴。我发现当我调用 axes 时,它还会自动将该 axes 对象放在所有其他对象(包括 uipanels 等)的前面。有什么办法可以避免这种情况吗?
这里有一些代码可以说明我的问题:
figure(1)
clf
ax1 = axes();
set(ax1,'position',[.1 .1 .5 .5],'xtick',[],'ytick',[],'color','r')
ax2 = axes();
set(ax2,'position',[.3 .3 .5 .5],'xtick',[],'ytick',[],'color','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)
makes
cax
the first object listed in theChildren
property of the figure and sets theCurrentAxes
property of the figure tocax
.
使 cax
在 Children
属性 中列出的第一个对象是导致它在前面的原因。这可以通过修改 属性 并查看效果来检查。此外,通过查看 uistack
的代码,可以看出该函数在内部执行的操作是重新排列图形 Children
.
将图形的 CurrentAxes
属性 设置为 cax
是导致这些轴成为当前轴的原因。这可以通过修改属性、绘制一些东西并查看绘图出现在哪个轴上来检查。
因此,将图形的 CurrentAxes
属性 设置为所需的轴即可实现所需的效果,而无需将这些轴移到前面。