主要内容

drawnow

更新图窗并处理回调

说明

drawnow 更新图窗并处理任何待处理的回调。如果您修改图形对象并且需要在屏幕上立即查看这次更新,请使用该命令。

示例

drawnow limitrate 将更新数量限制为每秒 20 帧。如果自上次更新后不到 50 毫秒,或图形渲染器繁忙(或者是因为处理之前的更改,或者是因为它正在初始化),则 drawnow 会在此时跳过新的更新。如果您在循环中更新图形对象并且不需要在屏幕上查看每个更新,请使用该命令。跳过更新可以产生更快的动画。待处理的回调得到处理,这样您可以在动画期间与图窗交互。

示例

drawnow nocallbacks 会延迟回调(例如 ButtonDownFcn 回调),直至下个完整的 drawnow 命令执行。如果您想要阻止回调中断您的代码,请使用该选项。暂时延迟回调会禁用图窗交互,例如点击鼠标或调整图窗大小。延迟回调不会影响动画速度。

drawnow limitrate nocallbacks 将更新数量限制为每秒 20 帧,如果渲染器繁忙则跳过更新。此语法还可以阻止回调中断您的代码,这样会暂时禁用图窗交互。

如果渲染器繁忙,drawnow update 会跳过更新并延迟回调。不建议使用该语法。改用 limitrate 选项。

drawnow expose 更新图窗但延迟回调。不建议使用该语法。改用 nocallbacks 选项。

示例

全部折叠

创建一个线条不断变长的动画,直到它累积到 2,000 个数据点。使用 drawnow 在每次循环迭代后将更改显示在屏幕上。

h = animatedline;
axis([0 4*pi -1 1])
x = linspace(0,4*pi,2000);

for k = 1:length(x)
    y = sin(x(k));
    addpoints(h,x(k),y);
    drawnow
end

通过完成下列步骤,创建一个线条不断变长的动画,直到它累积到 10,000 个点:

  • 创建一个动画线条对象 (h),并调用 axis 函数来创建一个具有特定 xy 坐标轴范围的坐标区对象。

  • axis 命令后立即调用 drawnow 来完成图窗和坐标区初始化。

  • 创建一个 for 循环,用于向动画线条添加点并更新绘图。

由于存在 10,000 个点,在屏幕上绘制每个更新可能较慢。您可以通过使用 limitrate 选项限制更新次数来加快速度。在循环结束之前调用 drawnow limitrate 命令会显示更改,但前提是自上次迭代以来已经过 50 毫秒。

在循环结束后,通过再次调用 drawnow 来显示最终更新。

x = linspace(0,4*pi,2000);
h = animatedline;
axis([0 4*pi -1 1])
drawnow  % Complete initialization

for k = 1:length(x)
    y = sin(x(k));
    addpoints(h,x(k),y);
    drawnow limitrate  % Display changes
end

drawnow % Display final updates

在动画循环之前计算所有数据。

h = animatedline;
axis([0 4*pi -1 1])
drawnow % Complete initialization
x = linspace(0,4*pi,10000);
y = sin(x);

for k = 1:length(x)
    addpoints(h,x(k),y(k));
    drawnow limitrate  % Display changes
end
drawnow % Display final updates

如果要执行长时间的计算,预计算数据可以提高性能。通过不间断计算,预计算能最大地缩短计算时间。此外,它还通过仅关注动画循环中的图形代码来帮助确保平滑的动画。

详细信息

全部折叠

提示

  • nocallbacks 选项始终都向队列中添加中断回调。如果您想要丢弃中断回调,则改用 InterruptibleBusyAction 属性。

扩展功能

全部展开

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2006a 之前推出