Con riferimento ai due grafici che hai inserito, come hai plottato i dati estratti quando hai ottenuto un grafico "vuoto"?
Hai scritto che aggiungendo "o" hai risolto, ma la funzione "plot", dovrebbe creare una linea, se non viene specificato nessuno "stile".
Venendo alla tua domanda.
Nell'esempio che ti ho proposto nella risposta precedente, ho usato una "struct" ed ho memorizzato i dati estratti delle figure nei suoi campi, questo per avere la possibilità di avere in un'unica variabile i dati di tutte le curve anche se di dimensioni diverse da una curva all'altra, cosa che non avrei potuto fare se avessi usato una semplice matrice (nell'esempio puoi verificare che la seconda curva contiene il doppio dei punti della prima)
Un approccio generale che consenta di estrarre dati da più "Figures" basato su un'estensione del metodo precedentemente proposto, potrebbe essere:
[*] definire (in un cellarray) i nomi dei file ".fig" senza l'estensione
[*] creare un ciclo "for" che apra le "Figure" e ne estragga i dati
[*] salvare i dati estratti in una "struct" (come nell'esempio precedente), ma creando un campo per ogni "Figure"
In pratica, potresti creare, sfruttando la funzionalità "dynamic filed names" delle "struct", un campo per ogni "Figure" assegnandogli il nome della "Figure", quindi, un "sottocampo" per ogni dato (uno per le "X", uno per le "Y", ...).
Nel caso in cui una "Figure" contenga più di una curva, puoi salvare i dati in un "cellarray" in modo da gestire l'eventualità che le curve abbiano una quantità di dati diversa.
Affinchè questo approccio funzioni, è essenziale che i nomi delle "Figure" non contengano quali spazi bianchi (o altri caratteri particolari come, ad esempio, "-"; in questo caso puoi sostituirli / eliminarli con la funzione "strrep").
Nell'esempio che segue, vengono create due grafici, ciascuno con due curve, tutte le curve hanno un numero diverso di dati.
I nomi delle due "Figure" sono: "prova_1.fig" e "prova_2.fig"
In fase di lettura dei dati, viene creata la seguente "struct":
data_line =
prova_1: [1x1 struct]
prova_2: [1x1 struct]
i cui due campi hanno il nome delle "Figure"
Ogni campo, a sua volta, ha tre campi
data_line.prova_1
X: {2x1 cell}
Y: {2x1 cell}
Z: {2x1 cell}
costituiti da "cellarray" nei quali sono memorizzati i dati delle (due) curve contenute nel grafico.
Nota che, in fase di lettura, le curve presenti nel grafico vengono lette (e quindi memorizzate nei "cellarray") in ordine inverso rispetto a quello nel quale sono state create nel grafico.
Nell'esempio di cui sopra
data_line.prova_1.X{1}
contiene i dati della seconda curva plottata nella prima "Figure".
% Create two sample Figures
f(1)=figure
t1=0:.1:2*pi;
t2=0:.1:4*pi;
y1=cos(t1);
y2=sin(t2);
plot(t1,y1,'r',t2,y2,'b')
% Save the Figure
savefig(f(1),'prova_1.fig')
f(2)=figure
t3=0:.1:6*pi;
t4=0:.1:8*pi;
y3=cos(t3);
y4=sin(t4);
plot(t3,y3,'r',t4,y4,'b')
% Save the Figure
savefig(f(2),'prova_2.fig')
% Close the example figures
close(f(:))
% Define the names of the files of the Figure (without specifying the file
% extension
fig_names{1}='prova_1'
fig_names{2}='prova_2'
% Loop over the Figures tobe read
n_fig=length(fig_names)
for i=1:n_fig
% Open the i-th Figure
openfig([fig_names{i} '.fig'])
% Get the axes handle
ax=gca;
% Get the axes Children handle
lines=ax.Children
% Loop over the Children to extract the data
for j=1:length(lines)
% Create the field after the name of the "Figure"
% Store the data in "cellarray"
data_line.(fig_names{i}).X{j,:}=lines(j).XData
data_line.(fig_names{i}).Y{j,:}=lines(j).YData
data_line.(fig_names{i}).Z{j,:}=lines(j).ZData
end
end