2010-05-10 11 views
15

ich so etwas wie dies tue:Plot in einer Schleife in MATLAB

a = [1:100]; 
for i=1:100, 
    plot([1:i], a(1:i)); 
end 

Mein Problem ist, dass die Handlung nicht, bis die Schleife beendet ist gezeigt. Wie kann ich den Plot in jeder Iteration anzeigen/aktualisieren?

Antwort

20

Verwenden DRAWNOW

a = [1:100]; 
for i=1:100, 
plot([1:i], a(1:i)); 
drawnow 
end 

Alternativ können Sie einen Blick auf ANYMATE aus dem Dateiaustausch haben wollen.

+2

Während drawNow die richtige Antwort ist, ich denke, man kann auch eine Pause (eps) Anweisung im Code an die Stelle der drawNow hinzuzufügen. Wenn Matlab die Pause macht, wenn auch nur für diesen Nano-Anteil einer Zeitscheibe, macht es auch eine Aktualisierung der Figur. –

5

Eine andere Möglichkeit dies zu tun, wenn Sie es nur visualisieren möchten, ohne die Animation zu speichern, ist die Verwendung von refreshdata anstelle von plot für nachfolgende Plots. Sie müssen weiterhin drawnow aufrufen, damit es auf dem Bildschirm aktualisiert wird.

entweder verwenden

set(fig_handle,'XData',new_xdata_array) 
set(fig_handle,'YData',new_ydata_array) 
refreshdata 
drawnow 

oder

set(fig_handle,'XDataSource',xdata_array) 
set(fig_handle,'YDataSource',ydata_array) 

%call this whenever xdata_array and ydata_array are assigned new values to see it updated in the plot 
refreshdata 
drawnow 

für Ihr Beispiel verwenden, könnte dies wie folgt aussehen:

a=[1:100]; 

figure; 
h=plot(1,a(1)); 
for i=2:100 
    set(h,'XData',[1:i]) 
    set(h,'YData',a(1:i)) 
    refreshdata 
    drawnow 
end 

Es ist nicht alles, was nützlich für einfache Liniendiagramme (für die plot(); drawnow; ist einfacher und schneller), aber wenn Sie kompliziertere Figuren mit mehreren erstellen müssen Plot-Plot-Typen kann dies nützlich sein.