第3回 gnuplotの使い方 (2/2)





2.スクリプトファイルを使おう

前回シェルスクリプトというものを紹介しましたが、gnuplotもいくつかのコマンドをあらかじめテキストファイルに書いておいて、一つのコマンドでそれらを一度に実行することが可能です。以下ではこの方法を紹介します。

a) スクリプトファイルの作成

ここでは、gnuplotで使えるスクリプトファイルを作成します。compphysのディレクトリで、emacsを使って以下の内容のテキストファイルを作成してください。ファイル名は「gnu.txt」とでもしておきましょう。

reset
set terminal postscript eps
set output "test2.eps"
set title "The T-dependence of the energy E"
set title font "Helvetica, 40"
set key top left
set xlabel "T"
set ylabel "E"
set xlabel font "Helvetica, 30"
set ylabel font "Helvetica, 30"
set xrange [0:1]
set yrange [0.01:10]
set logscale y
f(x)=2.4*x**(3/2)
plot f(x) title "E(T)=2.4T^(1.5)"

全部で15行のファイルです。このファイルの各行には、gnuplotのコマンドが書かれています。見慣れない行もありますので、各行の意味を解説すると以下のようになります。

reset (gnuplotの設定を初期化)
set terminal postscript eps (eps形式にする)
set output "test2.eps" (出力ファイルの設定)
set title "The T-dependence of the energy E" (上部に表示される図のタイトル)
set title font "Helvetica, 40" (図のタイトルのフォントとサイズ)
set key top left (keyの表示位置を図の左上に)
set xlabel "T" (x軸のラベルをTに)
set ylabel "E" (y軸のラベルをEに)
set xlabel font "Helvetica, 30" (x軸のラベルのフォントとサイズ)
set ylabel font "Helvetica, 30" (y軸のラベルのフォントとサイズ)
set xrange [0:1] (x軸の表示区域)
set yrange [0.01:10] (y軸の表示区域)
set logscale y (y軸を対数目盛に)
f(x)=2.4*x**(3/2) (関数を定義)
plot f(x) title "E(T)=2.4T^(1.5)" (関数をプロット)

このようにgnuplotには、軸のラベルやタイトル等に細かい設定ができるという利点があります。(ここでは挙げませんでしたが、その他にも例えば軸の目盛の刻み幅や、数字のフォントなども細かく設定することができます。。そのような細かい使い方が必要になった場合は、インターネットや専門書で調べてください。)

とりあえず上の15行のテキストファイル「gnu.txt」が作成できた人は、以下に進みましょう。

b) スクリプトの実行

さて、先ほど作ったgnu.txtを実行してみましょう。実行はとても簡単で、gnuplot上で「load "gnu.txt" [enter]」とするだけです。

1+1

実行してエラーが出なければ成功です。(エラーが出た人はどこか間違っているので、gnu.txtの内容をよく見てみましょう。)成功したらgnuplotをquitして、出力ファイルができているか確かめましょう。

1+1

test2.epsがありました。これをgsで見てみましょう。

1+1

このような図が見れたでしょうか。このようにあらかじめスクリプトファイルを作成しておけば、自分の好きな設定をすぐに使うことができるという利点があります。


3.数値データのプロット

さて、物理では関数のプロットだけではなく、例えば実験データのような、「数字の集まりをプロットする」状況が多くあります。ここではgnuplotを使って実験データをプロットする方法を紹介します。

a) データファイルの準備

まず、以下のような数値データファイルをemacsで作成しましょう。ファイル名は「data.txt」としましょう。

1.0 12.25 0.15
1.2 14.34 0,18
1.4 16.21 0.26
1.6 18.35 0.34
1.8 21.01 0.58
2.0 22.56 0.72

各行に3つの数字がある、全部で6行のファイルです。これは例えば、各行の一つ目の数字が温度、二つ目の数字がその温度での何かのエネルギーの測定値、三つ目の数字がエネルギーの測定誤差だったとしましょう。このデータを横軸を温度、縦軸をエネルギーとしてプロットすることを考えましょう。

b) スクリプトファイルの準備
先ほど上でやったように、スクリプトファイルを作るのが便利です。1から作るのは面倒なので、上で作ったgnu.txtを流用しましょう。まずコピーしてgnu2.txtを作成します。

1+1

そしてgnu2.txtをemacsで書き換えて、以下のような内容のファイルを作りましょう。

1+1

この最後の行がデータプロットに特有の書き方です。特に重要なのは「using 1:2:3 with errorbars」の部分です。1:2:3というのは、「data.txtの各行の一つ目の数字をx軸に、二つ目をy軸に、3つ目をその値の誤差として使え」という意味です。with errorbarsは文字通り、誤差棒を表示するオプションです。

ちなみに仮にdata.txtがもっと複雑な形をしていて、例えば各行に数字が10個くらい並んでいたとしましょう。そしてその中でも今注目したい量である温度が4番目、エネルギーが7番目、その誤差が10番目にあったとしましょう。この場合、上で「using 1:2:3」だった部分は「using 4:7:10」となるわけです。データファイルの形式によって、使い分けましょう。

c) スクリプトファイルの実行

さて、gnu2.txtが出来たらgnuplot上で実行してみましょう。次のようなグラフが書けたでしょうか。

1+1

d) 知っていると便利な事
今、温度Tを横軸としてプロットしましたが、例えば何らかの理由で横軸を1/Tにとりたい場合もあるかもしれません。このような場合、データファイルの一つ目の数字を計算しなおして、Tから1/Tへ手で書き換えることも可能です。しかし、gnuplotには便利な機能があって、スクリプトファイルでusing 1:2:3という部分を「using (1/($1)):2:3」と変更すると、横軸の数として一行目の数字の逆数を使ってくれます。この機能は大変便利で、様々な場合に使えます。例えば横軸としてT+1を使いたければ「using (($1)+1):2:3」のようにしてやればOKです。gnuplotではこのように、プロットする時点で簡単な計算をさせることができます。これは覚えておいて損はないので、時間があればチェックしてみましょう。