MATLAB中循环内部的绘图

17

我正在做类似于这样的事情:

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

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

4个回答

21

使用DRAWNOW

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

或者,您可能想看看来自文件交换的ANYMATE


2
虽然drawnow是正确的答案,但我认为在代码中可以在drawnow的位置添加一个pause(eps)语句。当Matlab执行暂停时,即使只有这个纳秒时间片,它也会对图形进行刷新。 - user85109

6

如果你只是想可视化动画而不保存它,另一种方法是在后续的绘图中使用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;更为简单和快速),但当您需要创建涉及多种绘图类型的复杂图形时,这将是非常有用的。


3

以下内容来自comet.m的文档

t = 0:.01:2*pi;
x = cos(2*t).*(cos(t).^2);
y = sin(2*t).*(sin(t).^2);
comet(x,y);

0

Matlab 允许您对变量进行类似自动化的循环语句排序

x = 0.0:0.1:2*pi

plot(x,cos(x));

这是一个例子......

很多时候你并不需要在循环中绘制图形


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接