私はMATLABを初めて使用し、いくつかの計算のリアルタイムプロットを表示しようとしていました。 N
サイズのベクトルがあり、一度にm
の値を処理します(たとえば、m = N/4
)なので、最初のm
値をプロットし、2番目のm
値が計算されたらすぐに、最初のプロットを置き換えます。
私のアプローチは次のとおりです。
for i=1:N,
...
//compute m
...
plot(m);
end;
ただし、すべてのループでプロットの更新に失敗し、すべてのループが終了してデータをプロットするのを待ちます。私の質問は、plot
の代わりに別の関数を使用する必要がありますか、それとも各ループに遅延を追加できますか?
毎回再プロットするのではなく、プロットを更新するために私が気付いていない方法があるに違いないと思います。
DRAWNOW
への呼び出しを追加して、プロットを強制的に更新することができます。 リファレンスページ を参照してください。 DRAWNOW
を使用すると、グラフィックイベントキューがフラッシュされ、コールバックなどが実行される可能性があることに注意してください。
Edricが言及 のように、 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
の呼び出しの後、次の場合は、 軸の制限 などの数の 軸のプロパティ を設定できます。軸を固定したままにし、プロットされる新しいベクトルm
ごとに外観を変更しないようにします。