2017年2月3日金曜日

gnuplotで時系列の3次元軌跡をgifに出力する

2次元データ,3次元データを時系列で表示する方法としてgnuplotでgif形式で出力するという方法をとります.以下で終わらせます.

gnuplot> load plotter.plt


plotter.pltの中身は
##ここから

if(exist("n")==0 || n<0)\  ##初期化のための条件式
reset;\
set xlabel "x [m]";\
set ylabel "y [m]";\
set zlabel "z [m]";\
\
set xrange [-1:1];\
set yrange [-1:1];\
set zrange [0:2];\
\
unset key;\
set ticslevel 0;\
\
set grid xtics ytics ztics;\
\
set terminal gif animate;\
set output "output.gif";\
\
n = 0;\                    #データの最初の行
n1 = 10000;\          #データの最後の行
dn = 100;\              #時系列の処理間隔
wn = 1000           #1度に表示する行数


##プロットする内容
sp "output.txt" every ::n::(n+wn) u 1:2:3 w l

#ループ処理
n = n + dn                
if ( (n+wn) < n1 ) reread

#終了処理
undefine n               
set terminal wxt

##ここまで

n行目から(n+wn)行目までを表示することを繰り返す,という処理をしています.繰り返し処理に"reread"を使用していますが,これはファイルの頭から実行し直すので,初期化処理に関連する部分は条件式を作ってあげる必要があります.n行目から(n+wn)行目までを表示するためには"every ::n::(n+wn)"としていますが,

every ::開始行::終了行

です."every"はもう少し他の使い方もありますが,現状必要な情報は上記のみでした.

また,gifということでファイルサイズに注意が必要になります.画像の枚数,すなわちおおよそ(n1/dn)枚が大きくなりすぎると再生するためにマシンパワーによっては悲鳴を上げ始めるので注意してください.

※実時間になっていません.実時間ぽくするためには
set terminal gif animate delay 数字
でフレーム時間が(数字/100) secになるので(デフォルトは5),dnに合わせて適宜調節をしてください.

0 件のコメント:

コメントを投稿