2010-05-10 73 views
15
一个循环内

我做这样的事情:情节MATLAB

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

我的问题是不显示的情节,直到循环结束。 如何在每次迭代中显示/更新绘图?

回答

20

使用DRAWNOW

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

或者,您可能希望从文件交换看看ANYMATE

+2

当的DrawNow是正确的答案,我认为一个人还可以在代码中的DrawNow的位置添加一个暂停(EPS)语句。当matlab进行暂停时,即使只是对于时间片的这个纳秒级分,它也会对图形进行刷新。 – 2010-05-10 10:27:19

5

如果您只想在不保存动画的情况下对其进行可视化,另一种方法是使用refreshdata而不是plot作为后续绘图。您仍需要拨打drawnow才能在屏幕上进行更新。

要么使用

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

或使用

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 

为你的榜样,这可能是这样的:

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 

这不是所有简单的线图是有用的(对于这plot(); drawnow;更简单和更快),但是当你需要创建更复杂的数字涉及多ple plot类型,这可能很有用。