【问题标题】:Plot inside a loop in MATLAB在 MATLAB 中的循环内绘图
【发布时间】:2010-05-10 02:51:06
【问题描述】:

我正在做这样的事情:

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

我的问题是直到循环完成后才会显示情节。 如何在每次迭代中显示/更新绘图?

【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    使用DRAWNOW

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

    或者,您可能想查看文件交换中的ANYMATE。

    【讨论】:

    • 虽然drawow是正确答案,但我认为也可以在代码中添加pause(eps)语句来代替drawow。 matlab在做暂停的时候,哪怕只是对于一个时间片的这个纳米级,也会对图做一次刷新。
    【解决方案2】:

    如果您只想在不保存动画的情况下对其进行可视化,另一种方法是使用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】:

      来自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);
      

      【讨论】:

        【解决方案4】:

        Matlab 允许您为变量自动执行循环语句

        x = 0.0:0.1:2*pi
        
        plot(x,cos(x));
        

        就是一个例子……

        很多时候你真的不需要在循环中绘制

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-21
          • 2012-04-26
          • 2015-07-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多