update 2003/ 2/11
![]() | |
![]() |
![]() ![]() ![]() ![]() |
![]() |
It's working !
(Anakin, Tatooine)
研究活動にgnuplotが特に便利なのは,出来上がったプロットファイルを 再利用できる点です.研究を続けていると,枠や軸名が全く同じで中の数値だ けが異なっているような図を何度も描かなければならないことがあります. gnuplotなら,一つのプロットファイルを使い,その中の表示するファイル名 の部分だけを変更することで,次々と別の図を作成することができますので効 率的です.これには,plot "datafile"の datafileの部分だけを書 き直しても良いし,あるいはdatafileの中身そのものを新しいデータに上書き して何度もプロットを繰り返すこともできます. gnuplotのバッチモードは大量のデータを処理するときに非常に便利です. グラフを作りたいデータの数が多いとき,市販のグラフソフトを使いながら一 枚一枚図を作っていては,いつまで経っても仕事が終わりません(簡単にでき るソフトもあるかもしれません.このページの作者が知らないだけです). gnuplotとUNIXのコマンドを組み合わせて,全てのデータを一気にグラフにす る方法を考ます. あるディレクトリの中に,calc1.dat, calc2.dat, calc3.dat のように番 号が付いたデータファイルがたくさん入っているとします.各々のデータファ イルの中身は,(X,Y)の組だけが書かれた単純な数値データです.まず, calc1.dat だけをとりだして,この図を作成するプロットファ イルを書きます.ここでは,数値計算編で行っ たように,図の表題,軸名,XYの範囲,目盛間隔だけを指定します.
このファイル data.plt をgnuplotに「食わす」 とPNGの画像が同じディレクトリに出来上がります.EPSのファイルを作りたけ れば, set terminal でPostscriptを指定し,あとファイル名を calc1.eps等に変更します.
![]() このプロットファイルを他のデータに流用する方法を考えます.上で作った data.pltで,書き直さないといけないのは,"calc1.dat"と"calc1.png"の2 つのファイル名だけです.残念ながらgnuplotは文字列定数を扱えないので, これらを変数にはできません.ここではsedを使ってcalc1 をcalc2に置換する方法と,ファイル名をshellス クリプトの引数として外部から与える方法を紹介します. sedを使ってファイルの一部を置換するには,次のようにします.
たったこれだけで,新しい図calc2.pngが出来上がります.あとはこの作 業を全データファイルに対して行うだけです.データファイルの数があまり多 くないなら,コマンドラインだけで作業できます. csh, tcsh
sh, bash
データファイル数が多い時は,以下のようにsedを使って,datという拡張 子が付いたファイル名から拡張子以外の部分だけを取り出して処理します. クォートとバッククォートを間違えないように.内側のsedは変数$iに ある".dat"を消す部分,外側はその文字列で calc1 を置換するためのもので す.
図を一枚ずつ描くshellスクリプトを書くこともできます.こちらの方が, 後で再利用できるので便利かもしれません.スクリプトには,上にあるような sedで変換しながらgnuplotに流し込む行を,ファイルの数だけ並べれば良いの ですが,
以下のように awkを使って lsコマンドの出力を整形すれば,このスクリ プトを簡単に作成することができます.スクリプトのファイルを作るには,下 のコマンドの実行結果をファイルにリダイレクトします(コマンド > script.sh).
プロットファイルの文字列を置き換える別の方法として,shellスクリプト の中に直接gnuplotのコマンドを書いてしまい,その中のファイル名を shellの変数にする方法もあります.gnuplotのコマンドをshellスクリプト に書き込むには,以下のようなHere Documentを使います.今度はデータファ イルcalc1.datから,EPSファイル calc1.epsを作ってみましょう.
見て分かるように,データファイルと出力EPSファイル名の拡張子を除いた 部分が,変数$1 に置き換えられています.この変数はスクリプト plot.shのコマンドライン引数として与えられます ので,下のようにコマンドラインから実行すれば,calc1.datから calc1.eps という図ができあがります.この方法なら,任意のディレクト リにあるデータをプロットし,その結果を同じディレクトリのファイルと して生成することができます.
データファイルとEPSファイルの名前を変える場合は,上のスクリプトの中 にあるどちらかの$1を$2としておき,コマンドラインで2つ の引数を与えます. さらに次のようなshellスクリプトやforeachなどを用いれば,上の例と同様 な図の大量生産が可能になります.
from Dr. Sato. Thanks !
![]() |
![]() | |
![]() |
![]() ![]() ![]() ![]() |
![]() |