gnuplot: スクリプトに引数を渡したい

gnuplotでは、スクリプトを読み出す機能があります。

gnuplot -c <filename>

この機能を利用することによって、定型的な処理を簡単に実施することができます。例えばパラメータを変えて実験をした際のデータを処理するなど。

この時に、スクリプトに対して何かしらの引数 (パラメータ) を渡すことができればより便利です。そして、 gnuplot にはもともとその機能が備わっているのです。

-c オプションの引数を利用

-c の後にスクリプトファイルを指定しその後にスペース区切りで数値や文字列などを並べることでスクリプトの引数とすることができます。

gnuplot -c <filename> ARG0 ARG1 ...

具体的にどういうことか見ていきます。例えば以下のようなスクリプトファイルを用意します。 ファイル名を script.plg とします。

print "This script is ", ARG0
print "1st arg :", ARG1
print "2nd arg :", ARG2

そして、引数を渡して実行すると以下のようになります。

> gnuplot -c ./script.plg test1 test2
This script is  ./script.plg
1st arg : test1
2nd arg : test2

ARG0 は実行対象のスクリプト名、ARG1 以降の ARG* はコマンドラインで与えられた引数に対して順次割り振られていくわけですね。

こちらの機能を利用することで、plot対象のファイル名を変えて同じ形式のグラフを出したいときなどに引数を与えるだけで簡単に実施ができるようになります。

ちなみにこの命名方式は bash スクリプトの引数の命名方式に似ています。

-e オプションで先回りして変数を定義

-c オプションでスクリプトを実行する前に -e を利用して変数を定義してしまう方法です。

-e オプションでは指定したgnuplotのコマンドを実行することができます。ダブルクオーテーションが必要です。

例えば以下のようにすればサイン波をすぐにPlotすることができます。

gnuplot -e "plot sin(x);"

これを利用して、 -e の中で変数の定義を先回りして行い、その定義した変数をスクリプトの中で利用するようにします。若干トリッキーです。

例えば以下のスクリプトを script.plg として作成します。変数名は何でもよいですが、ここでは hogefuga とします。

print "hoge is :", hoge
print "fuga is :", fuga

そして実際に使う際には以下のようになります。

> gnuplot -e "hoge = 32; fuga = 1008" -c ./script.plg
hoge is : 32
fuga is : 1008

この例だとあまり意味がないですが、実際にはおそらくファイル名などを指定して任意のファイルをPlotできるようにするなどといった使い方をするでしょう。

環境変数から渡す方法

最後に、最もトリッキーな手法です。環境変数の内容をスクリプト内部で取得して利用する方法です。

具体的には、 system というコマンドで シェルスクリプトのコマンドを呼び出すことができるため、その結果を変数に代入します。

例えば以下のようなスクリプトを作成します。

hoge=system("echo $hoge")
fuga=system("echo $fuga")
print "hoge is :", hoge
print "fuga is :", fuga

こちらを実行する際に、 上記の hoge とか fuga が環境変数として定義されていればそのままスクリプトの変数に代入されます。

環境変数の定義には export などを利用する方式がありますが、それだと環境が汚れる可能性もあるため、スクリプト実行時に同時に指定する方式を選びます。

hoge=32 fuga=1008 gnuplot -c ./script.plg
hoge is : 32
fuga is : 1008

まぁ、あんまり使わないと思います。

コメント

このブログの人気の投稿

gnuplot: グラフの色を変更する

[Linux] rsyncで進捗を確認する

gnuplotで縦線を引きたい