Each time I run my code it produces 100 figures. So, I have to waste my time and save each one of them. Is there a command that can do that work for me by saving all the figures at once?

1 个评论

m=1;
title("S31 Plot Measurement Number ("+m+")")
xlabel('Delay')
ylabel('Mag(S31)')
saveas(gcf,"S31_plot_"+name+"_Measurement_No_"+m+".fig")
close(gcf)
m=m+1;

请先登录,再进行评论。

 采纳的回答

Jan
Jan 2015-3-11
No, there is no such command. But it is easy to write one:
FolderName = tempdir; % Your destination folder
FigList = findobj(allchild(0), 'flat', 'Type', 'figure');
for iFig = 1:length(FigList)
FigHandle = FigList(iFig);
FigName = get(FigHandle, 'Name');
savefig(FigHandle, fullfile(FolderName, FigName, '.fig'));
end
Adjust the FigName to your needs.

5 个评论

I used this code and I get this: "Undefined function 'savefig' for input arguments of type 'double'." I have matlab 2013b edition, if it matters. can you help me ?
I think the code needs 'brackets'.. for fullfile(). See below
FolderName = tempdir; % Your destination folder
FigList = findobj(allchild(0), 'flat', 'Type', 'figure');
for iFig = 1:length(FigList)
FigHandle = FigList(iFig);
FigName = get(FigHandle, 'Name');
savefig(FigHandle, fullfile(FolderName, [FigName, '.fig'])); %<---- 'Brackets'
end
Just to complement, there is no need to use for loop to save them one by one.
savefig(FigList,filename) could save all the handles together in one file.
I noticed one "problem" when saving all figures into one file.
When loading them back with "openfig" the numbers/order of the figures becomes revered.
Why is that? Can anything be done to counteract that?
If they load backwards, I'm guessing findobj is LIFO. Maybe try
savefig(FigList(end:-1:1),filename)
instead?

请先登录,再进行评论。

更多回答(3 个)

Luke Shaw
Luke Shaw 2018-11-30
编辑:Luke Shaw 2018-11-30
Missed a make current step: set(0, 'CurrentFigure', figureHandle)
FolderName = tempdir; % Your destination folder
FigList = findobj(allchild(0), 'flat', 'Type', 'figure');
for iFig = 1:length(FigList)
FigHandle = FigList(iFig);
FigName = num2str(get(FigHandle, 'Number'));
set(0, 'CurrentFigure', FigHandle);
savefig(fullfile(FolderName, [FigName '.fig']));
end

5 个评论

Hi,
i have already saved figures in a folder. how can i make a gif in matlab combining all of them?
Ali Awada
Ali Awada 2021-10-16
编辑:Ali Awada 2021-10-16
Hi Luke,
Thanks for the code works perfectly.
I have a question:
how can i save the figure by the title i have given?
Your code saves them as "1.fig" where 1 corresponds to figure(1) in the code.
i have same issue, this code works perfectly but i want to save figures in png format. So how to do that. Thanks
Hi guys,
I tried to save figures with '.eps' format ...didnt work.
any idea ? thx
This worked for '.png' format, it should work for whatever format you want.
FolderName = tempdir; % Your destination folder
FigList = findobj(allchild(0), 'flat', 'Type', 'figure');
for iFig = 1:length(FigList)
FigHandle = FigList(iFig);
FigName = num2str(get(FigHandle, 'Number'));
set(0, 'CurrentFigure', FigHandle);
saveas(FigHandle,fullfile(FolderName, [FigName '.png'])); %Specify format for the figure
end

请先登录,再进行评论。

Tanveer
Tanveer 2022-9-18

4 个投票

FolderName = 'xx'; % Your destination folder
FigList = findobj(allchild(0), 'flat', 'Type', 'figure');
for iFig = 1:length(FigList)
FigHandle = FigList(iFig);
FigName = ['Fig' num2str(iFig)];
savefig(FigHandle, fullfile(FolderName, [FigName '.fig']));
saveas(FigHandle, fullfile(FolderName, [FigName '.png']));
% saveas(FigHandle,filename,formattype)
end
Mehri Mehrnia
Mehri Mehrnia 2022-8-3

0 个投票

Based on the answers, it means there is no 1 line of code which can save all open plots?

1 个评论

m=1;
title("S31 Plot Measurement Number ("+m+")")
xlabel('Delay')
ylabel('Mag(S31)')
saveas(gcf,"S31_plot_"+name+"_Measurement_No_"+m+".fig")
close(gcf)
m=m+1;

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Printing and Saving 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by