gnuplotのコマンドまとめ(ループとかeveryとか)
gnuplotのスクリプトを書いてたら、忘れてるのが一杯あって(主にループとeveryの構文)過去のスクリプトをあさったりしたので、まとめてみた。
gnuplotのループ文。
ループのための下準備
繰り返し構文以外に、以下のようなコマンドを使います
hoge = system("/bin/ls hoge*") | lsした結果をhogeの変数の中に代入. (要するにsystemでshellコマンドの結果を受けとれる) |
sprintf("%s_%d", string, 10) | formatを設定した文字列を作成する。 |
hoge = string1 . string2 | string1とstring2の文字列を連結 |
この3つを組み合わせてdo for文や、plot for文を使うと楽できまっせ!!!
plot for文
plot for [i=1:10] spritf("hoge%02d", i) t spritf("hoge%02d", i)
とやると、hoge01, hoge02,...hoge10をすべてplotしてくれます。
do for 文
dirnames = system("/bin/ls -d hoge*") do for [dir in dirnames] { file = dir . "/dat" p file t file }
とかすると、hoge*/datにマッチするファイルを順番にプロットしてくれるよ!!
大量に画像化するときや、簡易animationを作るときに便利だね!!
ちなみにdo for文はgnuplot4.6からしか、使えないので注意!!
every 文
every 行刻み:ブロック刻み:初期行:初期ブロック:終了行:終了ブロック
行刻み | 何行ごとに読みこむか(デフォルト値=1, すべて読み込む) |
ブロック刻み | 何ブロックごとに読みこむか(デフォルト値=1, すべて読み込む) |
初期行 | 何行目から始めるか |
初期ブロック | 何ブロック目から始めるか |
終了行 | 何行目で終わるか |
終了ブロック | 何ブロック目で終わるか |
plot for [i=0:10] 'hoge' every :::i::i
とすれば、各ブロックごとにプロットできるぞ!
ちなみに、gnuplotではブロックは、空白行があるとこまでを1ブロックとして認識するぞ!!