2010-05-10 6 views
15

Je fais quelque chose comme ceci:Terrain dans une boucle dans Matlab

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

Mon problème est que l'intrigue n'apparaît pas jusqu'à ce que la boucle est terminée. Comment puis-je afficher/mettre à jour le tracé à chaque itération?

Répondre

20

Utilisez DRAWNOW

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

Alternativement, vous pouvez jeter un oeil à ANYMATE de l'échange de fichiers.

+2

Alors que drawnow est la déclaration réponse, je pense que l'on peut également ajouter une pause (EPS) dans le code à la place de drawnow. Quand matlab fait la pause, même si c'est seulement pour cette nano-fraction d'une tranche de temps, il fait aussi un rafraîchissement sur la figure. –

5

Une autre façon de le faire si vous voulez juste de le visualiser sans enregistrer l'animation, est d'utiliser refreshdata au lieu de plot pour les parcelles suivantes. Vous devrez toujours appeler le drawnow pour qu'il soit mis à jour à l'écran.

soit utiliser

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

ou utiliser

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 

pour votre exemple, cela pourrait ressembler:

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 

Il est pas si utile pour des tracés linéaires simples (pour lesquels plot(); drawnow; est plus simple et plus rapide), mais lorsque vous avez besoin de créer des figures plus complexes impliquant plusieurs types de graphiques, cela peut être utile.