8ttyan’s blog

コンピュータ関係の小ネタ

gnuplotでdatファイルから行と列を指定して値を拾う方法

例えば,1行目にタイトル,2行目以降にデータが有るようなファイルがあるとする:

titleOfTest
0.0 0.000000
0.4 0.389418
0.8 0.717356
1.2 0.932039
1.6 0.999574
2.0 0.909297

これをgnuplot

plot "test.dat" u 1:2 with linespoint

とすると,1行目の部分は1列しか無いので無視されて,2〜7行目の部分がプロットされる. データファイルの(1,1)の部分を使いたいときは,以下のようにする.

gyou=1 #行番号を指定
retsu=1 #列番号を指定
filename="test.dat" # ファイル名を指定
elem=system("cat " . filename . " | awk \'NR==" . gyou ."{print $" . retsu . "}\'") # 特定の行列から値を拾う

# ここから通常の処理
set title elem
plot filename u 1:2 with linespoint

また,拾う行列の値が数値の場合,以下の様に4行目を変更して,C言語同様の書式指定(%e,%4f,%d など・・・)ができる.

gyou=2 #行番号を指定
retsu=1 #列番号を指定
filename="test.dat" # ファイル名を指定
elem=system("cat " . filename . " | awk \'NR==" . gyou ."{printf(\"%e\", $" . retsu . ")}\'") # %eの部分を好きに変える

# ここから通常の処理
set title elem
plot filename u 1:2 with linespoint