gnuplotを使ってeps形式でグラフ出力する

10年ぶりくらいにgnuplotを使ってみたら、すっかり忘れてしまっていた。というわけで、グラフをフィッティングしてepsファイル出力するメモを。

gnuplotのグラフをLaTeX向けに出力

LaTeXに貼るならば、EPSファイル形式で出力すると良い。epsファイルとは、PostScriptファイル(psファイル)の弟分(?)で、PostScriptをベースとして1枚画像などを扱うに適した形式である。

gnuplotでepsファイルを出力するには、set terminalコマンドでpostscript epsを指定する。以下ではcolor指定もしていて、ファイル名"sin.eps"として出力している。

gnuplot> set terminal postscript eps enhanced color
gnuplot> set output 'sin.eps'
gnuplot> plot sin(x)

こうすると、以下のようなepsファイルができあがる。

gnuplotで関数のフィッティング

データ系列があるときに最小二乗法でfittingさせたいときは、gnuplotのfitコマンドを利用すると良い。

ここでは、以下のようなデータファイルがあるとする。なお、周知の通り、gnuplotではカンマ区切りではなくスペース区切りを用いる。

0 0
1 1.1
2 2.1
3 2.9
4 4.2
5 5.4
6 6.0
7 6.9
8 7.9
9 9.1
10 10.2

このデータ系列を、f(x)=a*x+bという一次関数にフィッティングさせることを考える。これにはまず関数f(x)を定義して、fitコマンドでデータファイルを指定すれば良い。

具体的には以下のようにする。

関数を定義する
gnuplot> f(x)=a*x+b

fitコマンドで係数a,bを求める
gnuplot> fit f(x) "s1.dat" using 1:2 via a,b
(省略)
Final set of parameters            Asymptotic Standard Error
=======================            ==========================

a               = 1.00182          +/- 0.01562      (1.559%)
b               = 0.0636364        +/- 0.09239      (145.2%)

"Final set of parameters"が得られた係数a,bとなる。なおこの場合には、全てのデータの重みは1となっている。

近似式とデータを一緒に描く

近似式が得られたら、そのグラフと元データを合わせて描画したいのが普通だろう。plotコマンドは複数の対象を指定できるので、元のデータファイルと近似式の両方を指定して、重ねて描画してやれば良い。

set terminal postscript eps enhanced color
set output 'exp.eps'
set xlabel "length (mm)"
set ylabel "Absorbance (a.u.)"
f(x)=1.00182*x+0.0636364
plot "s1.dat" title "experimental data" with points pointtype 7, f(x) title "1.002x + 0.0636"

なおここで縦軸は吸光度を仮定したので、(a.u.)を指定している。吸光度のように測定系の比でしか議論できない数値は、任意単位(Arbitrary Unit)と呼ぶ。省略形はa.u.だが、他にarb. unitと書くこともある。

蛇足だったが、結果としてこういうepsファイルが得られる。

ということでオシマイ。