MATLAB中的实时绘图

kir*_*chi 12 graphics matlab plot animation real-time

我是MATLAB的新手,我试图显示一些计算的实时图.我有一个N大小的矢量,我一次处理m值(比如说m = N/4),所以我想绘制第一个m值,然后一旦m计算出第二个值就让它们替换第一个图.

我的方法如下:

for i=1:N,
  ...
  //compute m
  ...
  plot(m);
end;
Run Code Online (Sandbox Code Playgroud)

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

我认为必须有一种方法我不知道更新情节而不是每次重新绘制它.

gno*_*ice 32

正如Edric所说,你肯定希望drawnow在调用之后包含一个plot强制更新图形的命令.但是,有一种更有效,更平滑的动画方法,不涉及每次重建整个绘图.您可以简单地初始化绘图,捕获绘图对象的句柄,然后使用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
Run Code Online (Sandbox Code Playgroud)

此外,在循环之前和调用之后plot可以设置多个轴属性,例如轴限制等,如果希望轴保持固定并且不使用m绘制的每个新向量更改其外观.

  • @kirbuchi通常人们会按照(仅查看)接受的答案.*投票数*不是*引人注目*作为**绿色复选标记**;) (2认同)

Edr*_*ric 11

您可以添加呼叫以DRAWNOW强制绘图更新.请参阅参考页面.请注意DRAWNOW,这会导致刷新图形事件队列,这可能导致执行回调等.

  • 双缓冲是图的属性 - "set(gcf,'DoubleBuffer','on')"或类似的.可能也有帮助,但你需要一个DRAWNOW来强制更新. (2认同)