How can I save figures when created in a loop?

30 ビュー (過去 30 日間)
Nils
Nils 2023 年 1 月 31 日
コメント済み: Voss 2023 年 2 月 1 日
Hello, I am running my code in a loop for 66 meteorological stations/data sets. In that code, every dataset is evaluated and different calculations are made. Different figures are being created (n = 20). I managed to run the code in a loop, but I would like to save the figures according to their stationname in a different folder. So, 66 folders with each one including 20 figures from the code. I include the way I import and run the loop as well as one example of a figure. The content of the figure is irrelevant.
Let's say the calculations are made in that loop below, how can I save each file in a folder directory, that is based on its stationname?
I am using Matlab 2018b.
% Import Data from .csv
Stationnames = readtable('C:\my\directory\Stationnames.txt','delimiter',',');
Station = table2array(Stationnames);
ST = 1:length(Station);
S = dir(fullfile('C:\my\directory\data','*.csv'));
for k = 1:numel(S)
fnm = fullfile('C:\my\directory\data',S(k).name);
wind = dataset('file',fnm,'delimiter',',','format',['%s' repmat(' %f',1,4)]);
h1 = figure;
MB = bar(Norm.Comnmiss, 'grouped');
title('Count of low Quality Data Points')
ylabel('Count')
xlabel('Period')
grid on
set(gca, 'XTick', 1:4)
xticklabels({'Until 1999','2000-2005','2006-2011','2012-2021'});
saveas(h1,sprintf('C:\my\directory\...\Count_missing_values%d.fig',S(k).name));
end

採用された回答

Voss
Voss 2023 年 1 月 31 日
This won't work for a couple of reasons:
sprintf('C:\my\directory\...\Count_missing_values%d.fig',S(k).name)
  1. backslash (\) is an escape character for sprintf, i.e., an indicator of a special character such as \n (newline), \r (carriage return), \t (horizontal tab), etc., so you shouldn't use \ in your sprintf call unless you mean to indicate special characters such as the ones mentioned. You could replace all \ with \\ to escape the backslash and print a literal backslash, but an easier way would be to use %s to represent the first part of your file's full-path name (this is shown below).
  2. %d is not an appropriate format for S(k).name. Use %s to print a character array such as a file name.
Therefore, do something like this instead:
filename_prefix = 'C:\my\directory\...\Count_missing_values';
% ...
saveas(h1,sprintf('%s%s.fig',filename_prefix,S(k).name));
Note that that makes the file names all start with "Count_missing_values", which looks like what you're going for. If instead "Count_missing_values" should be the directory that contains the files, put another backslash on the end:
filename_prefix = 'C:\my\directory\...\Count_missing_values\'; % <- ends with \
% ...
saveas(h1,sprintf('%s%s.fig',filename_prefix,S(k).name));
  2 件のコメント
Nils
Nils 2023 年 2 月 1 日
Thank you, Voss.
Voss
Voss 2023 年 2 月 1 日
You're welcome!

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

その他の回答 (1 件)

Bora Eryilmaz
Bora Eryilmaz 2023 年 1 月 31 日
Use the saveas command to store the figure in a folder. If the folder is not there, you can use the mkdir command to create the folder before storing the figure. Alternatively, you can also use the exportgraphics command to store the figure content.

カテゴリ

Help Center および File ExchangeFile Operations についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by