web-dev-qa-db-ja.com

MATLABのループ内でプロット

私はこのようなことをしています:

a = [1:100];
for i=1:100,
    plot([1:i], a(1:i));
end

私の問題は、ループが終了するまでプロットが表示されないことです。繰り返しごとにプロットを表示/更新するにはどうすればよいですか?

17
Macarse

[〜#〜] drawnow [〜#〜] を使用します

a = [1:100];
for i=1:100,
 plot([1:i], a(1:i));
 drawnow
end

または、ファイル交換から [〜#〜] anymate [〜#〜] を確認することもできます。

21
Jonas

アニメーションを保存せずに視覚化する場合、これを行う別の方法は、後続のプロットにrefreshdataの代わりにplotを使用することです。画面上で更新するには、drawnowを呼び出す必要があります。

どちらかを使用する

_set(fig_handle,'XData',new_xdata_array)
set(fig_handle,'YData',new_ydata_array)
refreshdata
drawnow
_

または使用する

_set(fig_handle,'XDataSource',xdata_array)
set(fig_handle,'YDataSource',ydata_array)

%call this whenever xdata_array and ydata_array are assigned new values to see it updated in the plot
refreshdata
drawnow
_

たとえば、次のようになります。

_a=[1:100];

figure;
h=plot(1,a(1));
for i=2:100
  set(h,'XData',[1:i])
  set(h,'YData',a(1:i))
  refreshdata
  drawnow
end
_

単純なラインプロット(plot(); drawnow;がよりシンプルで高速な場合)にはそれほど便利ではありませんが、複数のプロットタイプを含むより複雑な図を作成する必要がある場合に便利です。

6
JS Ng

comet.mのドキュメント から

t = 0:.01:2*pi;
x = cos(2*t).*(cos(t).^2);
y = sin(2*t).*(sin(t).^2);
comet(x,y);
3
MatlabDoug

Matlabを使用すると、変数のループステートメントを並べ替えて自動化できます。

x = 0.0:0.1:2*pi

plot(x,cos(x));

例です......

多くの場合、実際にループ内にプロットする必要はありません

0
user3124024