【问题标题】:Real time plot in MATLABMATLAB 中的实时绘图
【发布时间】:2011-03-08 03:32:36
【问题描述】:

我对 MATLAB 非常陌生,我试图显示一些计算的实时图。我有一个N 大小的向量,我一次使用m 值(比如m = N/4),所以我想绘制第一个m 值,然后在计算第二个m 值后立即绘制让他们替换第一个情节。

我的做法如下:

for i=1:N,
  ...
  //compute m
  ...
  plot(m);
end;

但它无法在每个循环中更新绘图并等待所有循环完成以绘制数据。我的问题是:我应该使用另一个函数而不是 plot 还是可以在每个循环中添加一些延迟?

我认为一定有一种我不知道的方法来更新情节,而不是每次都重新绘制。

【问题讨论】:

标签: matlab animation plot graphics real-time


【解决方案1】:

作为Edric mentioned,您肯定希望在调用plot 之后包含drawnow 命令以强制更新图形。但是,有一种更有效、更流畅的方法来为绘图设置动画,而无需每次都重新创建整个绘图。您可以简单地初始化绘图,将handle 捕获到绘图对象,然后使用set 命令在循环中修改该对象的属性。这是一个例子:

hLine = plot(nan);         % Initialize a plot line (which isn't displayed yet
                           %   because the values are NaN)
for i = 1:N                % Loop N times
  ...
  % Compute m here
  ...
  set(hLine, 'YData', m);  % Update the y data of the line
  drawnow                  % Force the graphics to update immediately
end

此外,在循环之前和调用plot 之后,您可以设置多个axes properties,如axes limits 等,如果您希望轴保持固定而不改变其外观绘制的每个新向量m

【讨论】:

  • 谢谢,成功了!您和 Edric 的解决方案都非常有效。但如果我按照你的方式做,就不必每次都重新绘制。
  • @vvy 我接受了另一个,因为它首先出现并帮助我解决了我的问题,但后来我意识到这个更好。我想票数不言自明。
  • @kirbuchi 通常人们会遵循(只看)接受的答案。 投票数不像绿色复选标记那样引人注目;)
【解决方案2】:

您可以添加对DRAWNOW 的调用以强制更新绘图。请参阅reference page。注意DRAWNOW会导致图形事件队列被刷新,这可能会导致回调等被执行。

【讨论】:

  • 现在已经有一段时间了,但您可能想查看并使用双缓冲。我不记得在哪里设置该选项 - 但当时确实有所作为:)
  • 双缓冲是图形的一个属性——“set(gcf, 'DoubleBuffer', 'on')”或类似的。也可能有帮助,但您需要 DRAWNOW 来强制更新。
猜你喜欢
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多