Main Content

drawnow

Figure を更新してコールバックを処理する

説明

drawnow は Figure を更新し、保留中のコールバックをすべて処理します。graphics オブジェクトを変更して、すぐに更新内容を画面に表示するには、このコマンドを使用します。

drawnow limitrate は、更新回数を 20 フレーム/秒に制限します。前回の更新から 50 ms 以内の場合、あるいは前の変更によりグラフィックス レンダラーがビジー状態になっている場合、drawnow は新規の更新を破棄します。ループ内で graphics オブジェクトを更新していて個々の更新を画面に表示する必要がない場合に、このコマンドを使用します。更新をスキップすることにより、高速アニメーションを作成できます。保留中のコールバックが処理されるので、アニメーション中に Figure を操作できます。

drawnow nocallbacks は、次の完全な drawnow コマンドまで、ButtonDownFcn コールバックなどのコールバックを延期します。コードへのコールバックの割り込みを防ぐには、このオプションを使用します。コールバックの延期により、マウス クリックや Figure のサイズ変更などの Figure の操作が一時的に無効になります。コールバックの延期は、アニメーションの速度に影響しません。

drawnow limitrate nocallbacks は、更新回数を 20 フレーム/秒に制限し、レンダラーがビジー状態の場合は更新をスキップします。この構文はコールバックのコードへの割り込みも防ぎます。これにより、Figure の操作が一時的に無効になります。

drawnow update はレンダラーがビジー状態の場合に更新をスキップし、コールバックを延期します。この構文は推奨されません。代わりに limitrate オプションを使用してください。

drawnow expose は Figure を更新しますが、コールバックは延期します。この構文は推奨されません。代わりに 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 点のデータ点を追加しながら伸びるラインのアニメーションを作成します。10,000 点もあるため、更新のたびに描画すると低速になります。drawnow limitrate を使用して更新回数を制限することで、高速で滑らかなアニメーションを作成します。次に、ループの終了後に drawnow を呼び出して、最後の更新を画面に表示します。

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

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

アニメーション ループの前にデータをすべて計算します。

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

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

計算時間が長い場合、データを事前計算することでパフォーマンスを向上できます。事前計算では割り込みなしで計算を行うので、計算時間が最短になります。さらに、アニメーション ループ内ではグラフィックス コードのみを処理するので、アニメーションを滑らかにすることができます。

詳細

すべて折りたたむ

drawnow と等価のアクション

次のアクションは、完全な drawnow コマンドの呼び出しと等価です。

ヒント

  • nocallbacks オプションは常に、割り込みコールバックをキューに追加します。割り込みコールバックを破棄する場合は、代わりに Interruptible および BusyAction のプロパティを使用します。

拡張機能

スレッドベースの環境
MATLAB® の backgroundPool を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool を使用してコードを高速化します。

バージョン履歴

R2006a より前に導入