2010-05-10 27 views
15

sto facendo qualcosa di simile:Plot all'interno di un ciclo in MATLAB

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

Il mio problema è che la trama non viene mostrato fino a quando il ciclo è finito. Come posso visualizzare/aggiornare il grafico in ogni iterazione?

risposta

20

Usa DRAWNOW

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

In alternativa, si consiglia di dare un'occhiata al ANYMATE dallo scambio di file.

+2

Mentre drawNow è la risposta corretta, penso che si può anche aggiungere una dichiarazione di pausa (EPS) nel codice al posto di drawNow. Quando MATLAB effettua la pausa, anche se solo per questa nano-frazione di una porzione temporale, fa anche un aggiornamento sulla figura. –

5

Un altro modo per eseguire questa operazione se si desidera visualizzarlo senza salvare l'animazione, è utilizzare refreshdata anziché plot per i grafici successivi. Dovrai comunque chiamare lo drawnow per aggiornarlo sullo schermo.

usare sia

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

o utilizzare

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 

per il vostro esempio, questo potrebbe essere simile:

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 

Non è tutto ciò che utile per semplici grafici lineari (per il quale plot(); drawnow; è più semplice e veloce), ma quando è necessario creare figure più complicate che coinvolgono multi tipi di trama, questo può essere utile.