我是MATLAB的新手,我试图显示一些计算的实时图。我有一个N
大小的向量,我一次使用m
个值(比如m = N/4
),所以我想绘制第一个m
值,然后尽快计算第二个m
值,让它们替换第一个图。
我的方法如下:
for i=1:N,
...
//compute m
...
plot(m);
end;
但它无法在每个循环中更新绘图并等待所有循环完成以绘制数据。我的问题是:我应该使用另一个函数而不是plot
,还是可以在每个循环中添加一些延迟?
我认为必须有一种方法我不知道更新情节而不是每次重新绘制它。
答案 0 :(得分:31)
作为Edric mentioned,您肯定希望在调用drawnow
之后包含plot
命令以强制更新图形。但是,有一种更有效,更平滑的动画方法,不涉及每次重建整个绘图。您可以简单地初始化绘图,捕获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
更改其外观。
答案 1 :(得分:11)
您可以添加对DRAWNOW
的调用以强制更新地图。请参阅reference page。请注意,DRAWNOW
会导致刷新图形事件队列,这可能会导致执行回调等。