Can figure numbers be re-assigned?

50 次查看(过去 30 天)
Is it possible to re-assign a figure number , for example if I have a Figure 55 open, can I make it Figure 2 as long as I don't already have a Figure 2 open? If so how do I do this?
I have a routine that generates 60+ figures, and I delete all but 3 interesting ones. I would like to make them Figures 1,2,3 because I need to re-run the routine and generate another set of figures, and I'd like the first set to appear together in the figure order (it makes them easier to keep track of).
  1 个评论
Matt J
Matt J 2024-2-13
编辑:Matt J 2024-2-13
No perfect solutions yet, unfortunately. I really hope TMW implements this capability. It seems like such a basic thing to want to do.

请先登录,再进行评论。

采纳的回答

José-Luis
José-Luis 2014-6-9
编辑:José-Luis 2014-6-9
To get a list of all the existing figures:
get(0,'Children');
If figure two does not exist and you want to copy figure(55):
figure(2)
copyobj(allchild(55),2);
Get rid of figure(55):
clf(55);
And to answer your question directly. I believe once a figure number is set, you have to live with it. But there are workarounds, such as the one above.
  1 个评论
K E
K E 2014-6-9
编辑:K E 2014-6-9
Perfect. Here is how I modified your code to automatically reassign all open figure numbers - I know that's not what my question asked, but perhaps it will help someone else.
% Get a list of all existing figures
figList = sort(get(0,'Children'));
for iOld = 1:length(figList)
figOld = figList(iOld); % This is a figure to replace
% Used later to make sure size of figure is correct
posOld = get(figOld, 'pos');
figNew = figure; % Make new figure
% Used later to make figure appear at
% default horizontal position on screen
posNew = get(figNew, 'pos');
% Copy over lines (but not formatting)
copyobj(allchild(figList(iOld)),figNew);
% Reproduce figure name and size however don't move it horizontally
set(figNew, 'Name', get(figOld, 'Name'), ...
'pos', [posNew(1:2) posOld(3:4)]);
% Get rid of old figure
close(figList(iOld));
end

请先登录,再进行评论。

更多回答(2 个)

Joseph Cheng
Joseph Cheng 2014-6-9
编辑:Joseph Cheng 2014-6-9
This maybe a bit hard to implemented based on how you're selecting the 3 interesting ones but the function copyobj() will do the trick.
x = randi(10,1,5);
h1 = figure(1),plot(x);
figure(100);
h2 = gcf;
copyobj(allchild(h1),h2);
Here i create a random plot in figure 1. and then using gcf i get figure 100 and copy figure 1 to figure 100.

Matt J
Matt J 2024-2-13
编辑:Matt J 2024-2-13
The only reliable way that I have found, one which avoids copyobj and keeps all the figure formatting, is to save all open figures to a temporary .fig file and then reload i. The reloaded figures will always be numbered sequentially starting at the first available fig number.
H=findobj(groot,'Type','figure'); %Get all open figures
tn=tempname('.')+".fig"; %generate temporary name
savefig(H,tn)
close all
openfig(tn); delete(tn);

类别

Help CenterFile Exchange 中查找有关 Interactive Control and Callbacks 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by