今回はgnuplotを用いてプロットデータをファイルへ書き出す方法とデータファイルの統計情報を読み出す方法について紹介する。
1. データ書き出し
gnuplotでプロットデータをテキストなどのファイルとして書き出すにはset table "ファイル名"
とする。ただし、出力するターミナルがファイルになるので、グラフとして確認することができない。
どのようなプロットかみたい場合は事前にplotコマンドで確認してからset table
を実行するとよい。例えばサインカーブを"sin.txt"というファイルに書き出すには
set table "sin.txt" plot sin(x) unset table
生成された"sit.txt"の中身は以下のようになっている。
# Curve 0 of 1, 100 points # Curve title: "sin(x)" # x y type -10 0.544021 i -9.79798 0.364599 i -9.59596 0.170347 i -9.39394 -0.0308337 i -9.19192 -0.23076 i -8.9899 -0.421301 i -8.78788 -0.594705 i -8.58586 -0.743921 i -8.38384 -0.862879 i ----以下略
ヘッダー情報として出力点数、plotの関数、2次元xyプロットであることが記載されている。データは1列目がx, 2列目がy (=sin(x))、3列目はレンジに入っているかどうかを示す(i or o)が単純にプロットするとすべてi
と表示される。
xyプロットだけでなく3次元プロットのデータもプロットコマンドでsplotとするだけで書き出すことができる。
set table "surf_exp.txt" splot exp(-x**2-y**2) unset table
surf_exp.txt
の中身は以下のように1列増えてx,y,zの並びになっている。
# Surface 0 of 1 surfaces # Curve title: "exp(-x**2-y**2)" # IsoCurve 0, 100 points # x y z type -10 -10 1.3839e-87 i -9.79798 -10 7.55274e-86 i -9.59596 -10 3.79888e-84 i -9.39394 -10 1.761e-82 i -9.19192 -10 7.52337e-81 i -8.9899 -10 2.96222e-79 i -8.78788 -10 1.07491e-77 i
複数のプロットを1つのファイルに書き出すためにはsplot
やwith vector
などを使うが(以下参照)
gnuplotで数値をファイルに書き出す(table) - 米澤進吾 ホームページ
基本的には、plotまたはsplotで1組づつ書き出した方がコマンドが煩雑にならずに使い勝手がよいと思う。
2. レンジ情報の利用法
3列目のレンジ内にあるかどうかの情報は、最初にプロットのファイルを作成し、つぎにset yrange
などとしてレンジを設定してから再度作成したファイルを別のファイルに書き出す等の作業を行う。
例えば、最初にx2のプロットをx2.txt
に書き出し、Yのレンジをset range [30:80]
として設定する。次にset table "x2range.txt"
として最初に作成したデータをplot "x2.txt"
とすると、xyのデータがx2.txt"と同じで3列目のi/oの情報だけが異なる
x2range.txt`が書き出される。
set table "x2.txt" plot x**2 unset table set yrange [30:80] set table "x2range.txt" plot "x2.txt" unset table
x2range.txt
は以下のようになっており、3列目はyの値が30以上80以下ではi
, それ以外はo
と表記されている。
# Curve 0 of 1, 100 points # Curve title: ""x2.txt"" # x y type -10 100 o -9.79798 96.0004 o -9.59596 92.0824 o -9.39394 88.2461 o -9.19192 84.4914 o -8.9899 80.8183 o -8.78788 77.2268 i -8.58586 73.717 i -8.38384 70.2887 i -8.18182 66.9421 i -7.9798 63.6772 i -7.77778 60.4938 i -7.57576 57.3921 i -7.37374 54.372 i -7.17172 51.4335 i -6.9697 48.5767 i -6.76768 45.8014 i -6.56566 43.1078 i -6.36364 40.4959 i -6.16162 37.9655 i -5.9596 35.5168 i -5.75758 33.1497 i -5.55556 30.8642 i -5.35354 28.6603 o -5.15152 26.5381 o
レンジ情報を利用するには手順が煩雑で、ファイル数も増えるの使い勝手がよいとはいえない。
3. ファイルの統計情報取得
データファイルをプロットするとなく、平均値やばらつきなどの統計情報はstats
を用いて取得することができる。例えば、上で作成した"sin.txt"の統計情報を取得するには
stats "sin.txt" * FILE: Records: 100 Out of range: 0 Invalid: 0 Column headers: 0 Blank: 1 Data Blocks: 1 * COLUMNS: Mean: 0.0000 0.0000 Std Dev: 5.8315 0.6897 Sample StdDev: 5.8609 0.6932 Skewness: 0.0000 0.0000 Kurtosis: 1.7998 1.5558 Avg Dev: 5.0505 0.6155 Sum: 1.24345e-14 0.0000 Sum Sq.: 3400.6742 47.5672 Mean Err.: 0.5832 0.0690 Std Dev Err.: 0.4124 0.0488 Skewness Err.: 0.2449 0.2449 Kurtosis Err.: 0.4899 0.4899 Minimum: -10.0000 [ 0] -0.9994 [ 73] Maximum: 10.0000 [ 99] 0.9994 [ 26] Quartile: -5.0505 -0.6574 Median: 0.0000 0.0000 Quartile: 5.0505 0.6574 Linear Model: y = 0.02115 x - 2.039e-17 Slope: 0.02115 +- 0.01175 Intercept: -2.039e-17 +- 0.06855 Correlation: r = 0.1789 Sum xy: 71.94
sin関数ではご利益は少ないが、実験データファイルをプロットするかどうか判断するのに使えそう。
5. まとめ
今回はプロットデータをファイルへ書き出す方法とデータファイルの中身の統計情報を取得する方法について紹介した。