2017年2月7日火曜日

gnuplotで2系列データをmultiplotで上下に並べてx軸を揃えて比較する

タイトルの通りの内容です.制御入力と制御量を同時にグラフ出力するときにaxes xy2を使う方法がありますが,表示数が増えると見づらくなるので分けてしましたい.そこでmultiplotを使います.multiplotを使うと簡単に上下にグラフを並べられるのですが問題が2点.1)ラベルや軸目盛のせいでx軸の幅がずれる.2)時系列で上下に並べているので上のグラフのx軸のラベルと目盛が邪魔.ということで以下の通り処理してしまします.

set terminal wxt 0
reset
set lmargin 9 #x軸幅を揃えるためにグラフまでのマージンを決めてしまう(左側)
set rmargin 2 #右側のマージン
set ylabel "P[m], V[m/s], A[m/s2]"
unset xlabel  #xラベルを削除
set format x ""  #x目盛を削除
set grid
set multiplot layout 2,1  #multiplotの設定 layout 縦,横
p [:][-1:1] file.".txt" u 1:5 w l title "Xa", "" u 1:4 w l title "Xv", "" u 1:3 w l title "Xp","" u 1:2 w l title "Xdes"
set xlabel "Time [sec]"  #x軸のラベルを再設定(下のグラフ用)
set format x  #x軸の目盛を再設定(下のグラフ用)
set ylabel "Input"
p file.".txt" u 1:6 w l title "Input"
unset multiplot

ちなみに「file.".txt"」となっていますが,「file = 'name'」を設定しておけば「name.txt」がプロットされます.「.」は文字列の接続です.

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に合わせて適宜調節をしてください.