在MATLAB中的循环内绘图

时间:2010-05-10 02:51:06

标签: matlab plot

我正在做这样的事情:

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

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

4 个答案:

答案 0 :(得分:21)

使用DRAWNOW

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

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

答案 1 :(得分: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;更简单,更快),它并不是那么有用,但是当你需要创建涉及多种绘图类型的更复杂的数字时,这可能很有用。

答案 2 :(得分:3)

来自documentation for comet.m

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

答案 3 :(得分:0)

Matlab使您可以自动执行变量的循环语句

x = 0.0:0.1:2*pi

plot(x,cos(x));

是一个例子……

很多时候,您并不需要真正画出一个循环