Help us understand the problem. What is going on with this article?

gnuplotで連番ファイルをプロットする

More than 5 years have passed since last update.

数値計算とかやってると、
result0.dat
result1.dat
result2.dat
result3.dat
・・・
という連番ファイルを作りたくなる事がよくある。
当然できたファイルは結合してアニメーションにして研究室セミナーで発表するとか学会で使うとかしてドヤフェイスをかますのである。
((まぁ実は最近のgnuplotなら、連番ファイルを経ずにアニメーションを作れたりもしますが…。))
で、アニメーションにする方法はさておき、こういう時どうすればいいかを備忘録代わりに。

shell script + バッチファイル

まずバッチファイルを作っておく。

reset
input = sprintf("resuld%d.dat", i)
set term postscript enhanced eps color
set output sprintf("result%03d.eps", i)
plot input なんちゃらかんちゃら
set output
reset

どうせバッチファイルなのでset termは戻さなくていいやと開き直る。
これを適当にloop.pltとでも名づけて保存しておく。
で、次にshell scriptを組む。
gnuplotはバッチファイル食べさせる前に-e "云々"と入れとくと、
前処理として云々をしといてくれるので、ここでファイル番号を変数に突っ込みながら、
処理部分のバッチファイルを食わせてループを回す。
あと、時間削減のためすでに画像ファイルが出来ている場合はスキップさせる。

#!/bin/sh
st=$1
while [ $st -le $2 ]; do
  if [ ! -e $(printf "result%03d.eps" $st) ]; then
    gnuplot -e "i=${st}" loop.plt
  fi
  st=`expr $st + 1`
done

ここまで書いてloop.shみたいな名前で保存したら、実行権限を与える。

chmod u+x loop.sh

んで、実行の仕方はこう。

./loop.sh 0 10

もちろん、環境変数PATHに./が入っていれば頭の./は要らない。
これで0から10番までのファイルが順番に作られる。
あとはimage magickでも使ってアニメイションにしてくだしあ。

gnuplotでforする

割合最近の(いつだ?)gnuplotは、for loopに対応していたりするので、それを使ってしまう。
もうあるファイルはスキップするみたいな小回りは効かないけど。

reset
st = 0
to = 10
offset = 2
do for[i = st : to : offset]{
    input = sprintf("resuld%d.dat", i)
    set term postscript enhanced eps color
    set output sprintf("result%03d.eps", i)
    plot input なんちゃらかんちゃら
    set output
}
reset

残念ながら割と新し目(2014/05/31現在)の機能なので、ちょっと古いgnuplotしか使えなかったりすると駄目だったりする悲しさが有る。

NatsukiLab
天文とか惑星とかの研究してます。 重力多体計算(N-body)とか流体計算とか。 C++とかPerlとかrubyとかPythonとか。 それにMPIとかOpenMPとかAVXとかOpenCLとかOpenGLとかGRAPEとかPezy-SCとか。
http://v1.jmlab.jp/~hosono/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした