#Gnuplotで簡単にアニメーションを作る方法
条件
- ver4.6以上であること。
- terminalにgifが入っていること。
##はじめに
gnuplotで動画を作りたくなることありますよね。
ここでは動画を作る際のスクリプトを書いておきたいと思います。
gnuplotはver4.6以降からdo for
という構文が使えるようになりました。これのおかげで繰り返し命令ができます。それ以前はreread
とかいう意味わからん作業をしなくちゃいけなかったので、それに比べるとだいぶ素直に書けます。
今回は実際に使っていたスクリプトを結構そのまま抜き出してきたものなので、数字とかは適宜変えてください。
##前提
データを読み込んで動画を作るような場合を考えます。動画は、画面上をある点が動き回るものを想定します。今回のデータは、その点のx座標とy座標が、ひたすら改行もなしに書かれたものだとします。
##このようなスクリプトを作ります。
set terminal gif animate delay 5 optimize size 640,480
set output 'HOGE.gif'
do for [i=0: 3000] {
plot [-3:3][-3:3] "hoge.d" every ::i::i using 1:2 w p pt 7 ps 2
}
unset output
上から順に説明していきましょう。
set terminal gif animate delay 5 optimize size 640,480
terminalをgif動画のモードにします。ついでに色々設定します。
-
animate
: アニメーションのモード。 -
delay 5
: ある画像を表示してから次の画像を表示するまでに、0.001×5秒静止します。ただし、実際の表示時間は表示媒体に結構依存するので、実際に表示しながら確認するといいです。
optimize: ファイル容量を小さくする。どのように小さくするかはここを参照。 -
size 640,480
: 640x480のgif動画にする。あんまり大きいとサイズが重い。
do for [i=0: 3000] { 〜〜〜〜 }
こいつがこの記事の味噌です。この場合、i=0からi=3000までiを変えつつ、{}内を実行します。
gif animate
のterminal
では、出力順にアニメーションにしてくれるので、このループ文で絵を出力するたびにアニメーションのコマ数が増えていくわけです。
plot [-3:3][-3:3] "hoge.d" every ::i::i using 1:2 w p pt 7 lc 1 ps 2
データ"hoge.d"の i 行目だけをプロットするというコマンド。x軸は1列目、y軸は2列目の値を使う。範囲は$-3\leq x\leq3$ 、 $-3\leq y\leq3$。pt 7
で丸のプロットにしてます。
描画範囲を固定しないと動画にしたときにやたら見辛くなります。
unset output
したら出力終了となります。