- 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).
- %d is not an appropriate format for S(k).name. Use %s to print a character array such as a file name.
How can I save figures when created in a loop?
19 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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
0 Commenti
Risposta accettata
Voss
il 31 Gen 2023
This won't work for a couple of reasons:
sprintf('C:\my\directory\...\Count_missing_values%d.fig',S(k).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));
Più risposte (1)
Bora Eryilmaz
il 31 Gen 2023
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.
0 Commenti
Vedere anche
Categorie
Scopri di più su Printing and Saving in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!