在MATLAB中的循环内绘图

Mac*_*rse 17 matlab plot

我正在做这样的事情:

a = [1:100];
for i=1:100,
    plot([1:i], a(1:i));
end
Run Code Online (Sandbox Code Playgroud)

我的问题是在循环结束之前不会显示绘图.如何在每次迭代中显示/更新绘图?

Jon*_*nas 21

使用DRAWNOW

a = [1:100];
for i=1:100,
 plot([1:i], a(1:i));
 drawnow
end
Run Code Online (Sandbox Code Playgroud)

或者,您可能希望查看文件交换中的ANYMATE.

  • 虽然drawow是正确的答案,但我认为还可以在代码中添加一个暂停(eps)语句来代替drawow.当matlab进行暂停时,即使只针对时间片的这个纳米分数,它也会对图形进行刷新. (2认同)

JS *_* Ng 6

如果您只想在不保存动画的情况下将其可视化,另一种方法是使用refreshdata而不是plot后续绘图.您仍然需要呼叫drawnow它在屏幕上更新.

要么使用

set(fig_handle,'XData',new_xdata_array)
set(fig_handle,'YData',new_ydata_array)
refreshdata
drawnow
Run Code Online (Sandbox Code Playgroud)

或使用

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
Run Code Online (Sandbox Code Playgroud)

对于您的示例,这可能看起来像:

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
Run Code Online (Sandbox Code Playgroud)

它对于简单的线图(对于它plot(); drawnow;来说更简单,更快)并不是那么有用,但是当你需要创建涉及多个绘图类型的更复杂的图时,这可能是有用的.