2008年10月8日水曜日

sed+gnuplot

ノーベル賞日本人4人ってすげー。
南部先生といえば南部演算子とかしか知らんので、てっきり超伝導の人だとおもってたら素粒子の人だったんだ。超伝導も自発的対称性の破れってやつなんかぁ。超伝導は食わず嫌いというか手を出すと危険な香りがぷんぷん漂う恐ろしい領域なので踏み入ったことが無いからよく知らん。それにしても素粒子と物性ってなんだかんだ言って理論のベースは近いんだな。応用になってくると全然違うほうを向いてる気がするけど。見慣れない用語に毛嫌いしてんとマトモに場の理論とかも見といたほうがいいんかもなー。そして物性の人間としては近藤先生のノーベル賞まだー?と言いたい。

gnuplotはsedコマンドと組み合わせて使うと図の大量生産がラクだ。
ちなみにコマンドプロンプト経由でgnuplotを起動する場合、Windowsではwgnuplot.exeがあるディレクトリにパスを通して、wgnuplotで起動する。(Linuxだとgnuplotなんだが)
sedはUnixコマンドなんだが、MinGWなりCygwinが入ってるとコマンドプロンプトで使える。
sed -e "s/x/y/g" aaa.txt > bbb.txt
のようにするとaaa.txt中のxをyで置換したものをbbb.txtとして出力するということになる。
Linuxだと
sed -e "s/x/y/g" aaa.txt | gnuplot
でsedで置換して直でgnuplotにほり込めるみたいなんだが、Windowsではなんかうまく行かない。
たいてい論文とか学会用の図を作るときはある一つのパラメーターだけが違うデータで似たようなグラフを何枚か作るというパターンが多い。ので、sedでパラメーターの部分だけ変換したgnuplot用のバッチつくるバッチファイルを作る+バッチをまとめてロードするバッチをつくる(文にするとわけわからんな)をつくってやると楽。サンプルを自分用にあげとくと、

固有値の結果をプロットする用(a=5.0って条件)
set terminal gif
set output "eigen_odd_a5.0.gif"
set xrange[1:41]
set yrange[0:2.0]
set xlabel "iteration N+1= odd"
plot "odd_eigen_5.0" w p ps 0.5 pt 7 lt -1 ti "a5.0"

eigen5.0.gpって名前で保存(ちなみに点でプロットするときもその色はlt で決める。lt はラインタイプってだけでは無い模様)

sed でひたすら変換してる部分作る

sed -e "s/5.0/3.0/g" eigen5.0.gp >eigen3.0.gp
sed -e "s/5.0/7.0/g" eigen5.0.gp >eigen7.0.gp
sed -e "s/5.0/9.0/g" eigen5.0.gp >eigen9.0.gp
sed -e "s/5.0/11.0/g" eigen5.0.gp >eigen11.0.gp

これを実行してから

load "eigen3.0.gp"
load "eigen5.0.gp"
load "eigen7.0.gp"
load "eigen9.0.gp"
load "eigen11.0.gp"

って書いたファイルをgnuplotにロードしてやる。と、gif画像が5枚一気に生産される。自分で打つ部分がちょっとでも少なくなるとなんか嬉しい。
ちなみにgnuplotでファイルに出力したグラフはgnuplot起動中には見れなかったりするので、gifを確認したかったらいちどgnuplotを終了しないといけない。

0 コメント: