Stacking order of figures

Suppose I create three figures
for ni = 1:3
figure
plot(rand(7))
drawnow
end
These will be drawn with Figure 1 on the bottom, Figure 2 in the middle, and Figure 3 on top, remaining viewable at the end.
How can change the stacking order? Prior to 2014b, one could sort the Children of the root object numerically, but I can't figure out how to do it in 2014b.

回答 (1 件)

Doug Hull
Doug Hull 2014 年 11 月 18 日

0 投票

Maybe I am misunderstanding the question:
close all
for ni = 1:3
figure
plot(rand(7))
drawnow
end
uistack(2,'top')
uistack(1,'top')

4 件のコメント

the cyclist
the cyclist 2014 年 11 月 18 日
編集済み: the cyclist 2014 年 11 月 18 日
You are not misunderstanding, but this tiny extension of your code does not correctly order the figures (in 2014b on latest Mac OS X):
rng('default')
NFIGURES = 4;
close all force
for nf = 1:NFIGURES
figure
plot(rand(7))
drawnow
end
for nf = NFIGURES-1:-1:1
uistack(nf,'top')
end
Bug?
FYI, how I did this formerly (and successfully) was
set(0,'Children',sort(get(0,'Children')));
matt dash
matt dash 2014 年 11 月 19 日
Have you tried
set(0,'Children',sort(double(get(0,'Children'))));
the cyclist
the cyclist 2014 年 11 月 19 日
Yes, that seems to work. Thanks!
men8th
men8th 2023 年 2 月 8 日
編集済み: men8th 2023 年 2 月 8 日
An explicit version of the above command, which doesn't rely on casting a figure handle to double returning the figure number is:
set(groot,'Children',sort([get(groot,'Children').Number]))
This also uses groot to point to the graphics root object, rather than the magic number 0.
From reading the documentation, This will only find and re-order figures with visible handles. To work with all figures, you need to use findall.

サインインしてコメントする。

カテゴリ

ヘルプ センター および File ExchangeCreating, Deleting, and Querying Graphics Objects についてさらに検索

質問済み:

2014 年 11 月 18 日

編集済み:

2023 年 2 月 8 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by