以下の内容はたいへん古くなってしまいました。 もう gnuplot 4 が出ています。 竹野さんの gnuplot のページ (Takeno Lab) にはマニュアルの和訳などたくさんの情報がありますので,そちらを見ていただくことをお勧めします。
また、 gnuplot tips (not so Frequently Asked Questions) にとても詳しい解説があります。
Windows 版での利用については
を参照してください。
なお、このページの 参考リンク もご覧ください。
gnuplot はオープンソースのグラフ描画プログラムです。 もともとは UNIX 上のものでしたが,Windows 版などもあります。
意外かもしれませんが,gnuplot は GNU(グニュー)プロジェクトのソフトではありません。 頭3文字が同じになったのは単なる偶然のようです。 ライセンスも GNU の GPL ではありません。 ニュープロットと読むのが正しいのでしょうが,グニュープロットと読む方が通じやすいかもしれません。 また,全部小文字で綴るのが正しいということです。 ただし英語ではセンテンスの頭では Gnuplot となり,タイトルなどでは GNUPLOT と表記することもあります。
以下は古い情報をとりあえず残しておきます。
2002年12月に出た gnuplot-3.7.3.tar.gz をインストールしてみました。
tar xvzf ...../gnuplot-3.7.3.tar.gz cd gnuplot-3.7.3 ./configure make make install
pdflib を入れれば ./configure --with-pdf で PDF 対応にできます。
ここでは山賀さんの gnuplot 日本語化機能拡張パッチを適用してみます。 詳しくは The Official Site of PLUS-enhanced patch for GNUPLOT*1 をご覧ください。
オリジナルの gnuplot-3.7.1.tar.gz に加え,山賀さんのパッチ gnuplot3.7.1+1.2.0.patch.tar.gz をいただいてきます。
gcc 3.1 でコンパイルしたら Segmentation fault (core dumped) になってしまったので,egcs-2.91.66 でやり直しました。
tar xvzf ..../gnuplot-3.7.1.tar.gz cd gnuplot-3.7.1 tar xvzf ..../gnuplot3.7.1+1.2.0.patch.tar.gz patch -p0 <gnuplot3.7+1.2.patch touch aclocal.m4 touch configure ./configure --with-vflib --with-readline=gnu make make install
山賀さんの日本語版ドキュメントは gp+ ディレクトリの中にあります。
単に gnuplot と打ち込めば起動します。 ここで,たとえば
plot sin(x)
などと打ち込むと,グラフが現れます。 グラフを消すには,グラフにフォーカスをあてて q です(あるいはグラフの「×」をクリック)。
help と打てば解説が読めます。
終了は quit または exit です。
データファイルはたとえば次のようにまとめておきます。 頭に # が付く行はコメントです。
# Bz rho Hall Seebeck Nernst 0.0 1.46e-06 -4.19e-06 -0.000283 0.000105 0.1 1.48e-06 -4.07e-06 -0.000287 8.56e-05 0.2 1.51e-06 -3.94e-06 -0.000293 6.2e-05
欠損値はたとえば ? で表しておき,gnuplot 側で
set missing "?"
のように設定しておきます。
第1列を x 座標,第3列と第5列を y 座標としてプロットするなら
plot 'data' using 1:3 w l, 'data' using 1:5 w l
とします。w l は with lines の略で,折れ線で結ぶ意です。 あいまいさがなければこのように略せます。 using も u だけでもかまいません。
いちいち with lines するのが面倒なら,最初に
set data style lines
と打ち込んでおきます。
線ごとの凡例を変えるには
plot 'data' using 1:3 t 'Raw' w l, 'data' using 1:5 t 'Effective' w l
のようにします(t は title)。凡例を付けないなら,あらかじめ
set nokey
と打ち込んでおきます。
キーがなくても任意の位置に任意のラベルを書き込むことができます。
set label 'Effective' at 3.9,3.2e-5 right
ここで right を付けたのは座標 (3.9, 3.2e-5) に右揃えするためです。 right がなければその点に左が揃います。 これらのラベルをご破算にするには set nolabel と打ちます。
ラベルをグラフの y 軸に付けるなら
set ylabel 'Electric Resistivity ({/Symbol W} m)'
のようにします。ここで {/Symbol W} は Ω という文字を出力するコマンドです。 また,m^{-1} とすれば m-1 となります。 ただしこれらは出力として PostScript,オプションとして enhanced を選んだときだけ有効です(後述)。
他のトリックとして,y 軸を上下逆にするには
set yrange [] reverse
とします(元に戻すのは set yrange [] noreverse)。 y 軸として第6列から2を引いた値を使い,3次スプラインで補間するには,
plot 'data' using 1:($6-2) smooth csplines w l
とします。 smooth csplines は s c でもかまいません。
EPS 形式で出力するには,たとえば次のようにします。
set term post eps enh color 22 set out 'filename.eps' replot # 再描画 set out # 出力先を標準出力に(つまり filename.eps を閉じる) set term x11 # 出力形式をX11に戻す
モノクロなら color は不要です。 他の文書にインクルードするのでなければ eps も不要です。
もっとよい方法は,次のように tgif 形式で出力し,あとで tgif で修正することです。
set term tgif set out 'filename.obj' replot set out set term x11
たとえば save 'filename.gnu' と打ち込めば, 設定の内容と最後のプロットコマンドが保存されます (ただしターミナルを変更する set term と 出力先を変更する set out はコメントアウトされた形になります)。 保存したファイルは load 'filename.gnu' で実行できます。
gnuplot で等高線を描くには次のようにします。 データはファイル data に, x 座標が第1カラム, y 座標が第2カラム, 高さが第4カラムに入っているとします。
set nosurface set contour set view 0,0 set cntrparam levels auto 10 splot 'data' using 1:2:4 w l
メッシュが 128×128 といった中途半端な値のときは, 次のような範囲指定が必要かもしれません。
set xrange [0:128] set yrange [0:128]
また,x,y 軸の目盛がじゃまになるなら,次のようにします。
set noxtics set noytics
上の例では等高線の水準は自動で約10程度としました。 自動で決められてしまうのが嫌なら,次のように個々に設定します。
set cntrparam levels discrete 0.0005, 0.005, 0.01, 0.015, 0.02, 0.0235
縦横比をうまく 1:1 にするには,次のように table 形式で書き出して, 再度読み込んで描画するといいでしょう。
set term table set out 'filename' replot set out set term x11 set size square # 両軸を同じ比率に set nokey plot 'filename' w l
これを tgif 形式で書き出し,tgif で読み込んで修正します。
set term tgif set out 'filename.obj' replot set out set term x11
現状では長方形領域の等高線しか描けません。
たとえば2次関数でフィットするには次のようにします。
f(x) = a*x**2 + b*x + c fit f(x) 'measured.dat' using 1:3 via a, b, c
最後に次のようにしてグラフを描けばフィットの良さがわかります。
plot f(x), 'measured.dat' using 1:3
たとえばデータファイルの1列目と5列目を取り出すには,Perlで次のようにします。
perl -ane 'print "$F[0]\t$F[4]\n"' data >newdata
Perlのオプション -a はautosplitといってスペースで区切られた部分を $F[0],$F[1],……に切り出します。
複数のファイルの対応する行を結合するにはUNIXの paste コマンドが便利です。
paste data1 data2 data3 >data