MATLABで計算過程を時々刻々とリアルタイムにプロットしたい時
基本は、drawnow
を使ってイベントキューをフラッシュする。ただ、下記に示すように3つの方法が考えられる。方法1が速いしシンプルだが、凝ったプロットをしたいときに上手くいかない事もあるので、refreshdata
も用いた方法2及び方法3も紹介する。
方法1
%%% Data num=100; xmax = 10; x = linspace(0,xmax,num); y = sin(x); %%% PLOT figure hold all xlim([0 xmax]); ylim([-1 1]); for i=1:num plot(x(i), y(i), 'o'); drawnow pause(1/num) end
方法2
%%% Data num=100; xmax = 10; x = linspace(0,xmax,num); y = sin(x); %%% PLOT figure; h=plot(x(1),y(1), 'k-', 'LineWidth', 2); xlim([0 xmax]); ylim([-1 1]); for i=1:num set(h,'XData',x(1:i)) set(h,'YData',y(1:i)) refreshdata drawnow end
方法3
%%% Data num=100; xmax = 10; x = linspace(0,xmax,num); y = sin(x); %%% PLOT figure; h=plot(x(1),y(1), 'k-', 'LineWidth', 2); set(h,'YDataSource','yp') set(h,'XDataSource','xp') xlim([0 xmax]); ylim([-1 1]); for i=1:num xp = x(1:i); yp = y(1:i); refreshdata drawnow end