メインコンテンツ

drawnow

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

説明

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

drawnow limitrate は、更新回数を 20 フレーム/秒に制限します。前回の更新から 50 ミリ秒未満の場合、またはグラフィックス レンダラーが (前回の変更または初期化中のため) ビジー状態の場合、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 点のデータ点を追加しながら伸びるラインのアニメーションを作成します。

  • animated line オブジェクト (h) を作成し、axis 関数を呼び出して、特定の "x" 軸および "y" 軸の範囲をもつ axes オブジェクトを作成します。

  • axis コマンドの直後に drawnow を呼び出して、Figure と座標軸の初期化を完了します。

  • アニメーション化されたラインに点を追加してプロットを更新する 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 オプションは常に、割り込みコールバックをキューに追加します。割り込みコールバックを破棄する場合は、代わりに Interruptible および BusyAction のプロパティを使用します。

拡張機能

すべて展開する

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

バージョン履歴

R2006a より前に導入