gnuplotの使い方

ここではgnuplotの使い方について説明する。

gnuplotとは

gnuplotとは無料で配布されているフリーのグラフ描画アプリケーションである。

分子シミュレーションで何か解析を行った際、必ず定量的な数値が出てくる。それをグラフとしてプロットする際に用いる。

実験の研究でも解析結果をまとめることがあると思うが、通常はExcelを使うはず。その代わりにgnuplotを使うということである。

メリットとしては1度スクリプトを用意してしまえば、同じ解析結果をいくつもプロットする時に瞬時に作成できてしまうことである。Excelはグラフを作る度にラベルやらフォントやらグラフの色やらを直すのが面倒くさい。

まあデフォルトの設定を変えたり、マクロを組むなり簡単にする方法はあると思うが、それを含めてもgnuplotの方が早い。

あとはLinux上ではExcelは動かないし、その解析結果をいちいちWindowsにもっていくのも面倒くさい。そういう諸々の理由でgnuplotを使う。

gnuplotを早速使う(対話)

最も簡単なgnuplotの使い方は以下である。

$ gnuplot    #gnuplot起動
$ p "sample.txt" w l

sample.txtは以下からダウンロードできる。

sample.txt

グラフが表示されると以下のようになる。

../_images/sample.png

簡単にコマンドの説明をしておく。

  • p (もしくはplot): プロットするファイル名を指定。

  • w l(もしくはwith line): ライン表示にする。

ただし今の場合ラベルもない上に、色も赤になってしまっている。これらを変更するオプションもあるが、それはスクリプトで行う。

gnuplotはシェルと同じで対話的に使うこともできる一方でスクリプトとしても使用できる。但し対話的な使い方はあくまで簡単にグラフを見たい時であり、基本的に発表用のグラフなどはスクリプトを使う。発表用に体裁を整えるのをいちいち何度もコマンド打ってやっていたら日が暮れてしまうためだ。そのため細かいオプションについては次の項で述べる。

gnuplotを早速使う(スクリプト)

スクリプトを1から書くのは難しい。ある程度テンプレートから自分の好みや、自分のプロットに必要なオプションを追加していきながら学んでいくのがよい。

そのため筆者が動径分布の解析に用いているスクリプトを用いて説明していく。スクリプトとプロットに必要なデータのファイルを以下からダウンロードできるので、実際に手を動かしながら説明を読んで欲しい。

gnuplotスクリプト プロット用データ1 プロット用データ2

説明の都合上スクリプトをコードとして以下にも載せておく。

set terminal pngcairo enhanced size 600,600 font "Times New Roman, 18"
set output "rdf.png"
#set size square
#set size ratio 0.50
set tmargin at screen 0.85
set lmargin at screen 0.20
set rmargin at screen 0.80
set bmargin at screen 0.25
set title "RDF (POPE-POPE)" offset -0.5,0.0
set key below right font 'Times New Roman,15'
#set key left at graph 0.25,-0.25 font 'Times New Roman,15' 
#set key right top font 'Times New Roman,12'
set xlabel "r (nm)" offset 0.0,0.0 font 'Times New Roman, 20'
set ylabel "g(r)" offset 1.0,0.0 font 'Times New Roman, 20'
set y2label "coordinate number" offset -1.5,0.0 font 'Times New Roman, 20'
set label font "Times New Roman, 18"
#set xrange [0:24] 
#set yrange [0:40.0]
#set y2range [0:40.0]
set xtics nomirror 
set ytics nomirror 
set y2tics nomirror 
#set xtics 10
#set mxtics 10
#unset mxtics
#set ytics 0.2
#mxtics 2
#unset mytics
set tics font "Times New Roman, 14"
set format y "%2.1f"
plot 'GR2_GG_POPE--POPE_CG.dat' u 1:2 axis x1y1 with line lt rgbcolor "red" title "pSPICA",\
     'GR2_GG_POPE--POPE_AA.dat' u 1:2 axis x1y1 with line lt rgbcolor "orange" title "AA",\
	 'GR2_GG_POPE--POPE_CG.dat' u 1:3 axis x1y2 with line lt rgbcolor "blue" title "pSPICA",\
	 'GR2_GG_POPE--POPE_AA.dat' u 1:3 axis x1y2 with line lt rgbcolor "green" title "AA"
#set terminal pop

スクリプトを使用する際は、gnuplot RDF.gpというように「gnuplot + 入力ファイル(スクリプト)」とすればよい。

すると以下のようなrdf.pngが生成されるはずだ。

../_images/rdf.png

上記の画像を元に説明していく。しかし、gnuplotを1から体系的に説明するのはその膨大さ故に不可能であるので、細かいオプションについては簡単に説明し、使用するコマンドの主要部分に要点を当てて説明する。

尚、このプロットは全原子計算と粗視化計算においてそれぞれPOPE脂質同士の動径分布を解析したものである。動径分布に加えて配位数も同時にプロットしている。

terminal

gnuplotはターミナルというものを切り替えることができ、自分が作成するファイルの種類や用途に応じてこれを切り替える。

筆者が使用しているのはpng形式の画像を作成するためのモードである、「pngcairo」である。モードの切り替えには

set terminal pngcairoとすればよい。pngのターミナルになっていないのに、出力ファイル名の拡張子をpngとしてもpngを作れないので注意。

output

出力ファイル名の指定である。set output "hoge.png"とすればよい。

margin

グラフの余白サイズを決める。アルファベットはそれぞれ以下の意味。

  • tmargin: グラフの大きさ(縦)

  • lmargin: 左部の余白

  • rmargin: グラフの大きさ(横)

  • bmargin: 下部の余白

正直意味が分からない。が、以下のリンクによればそういうことらしい?

gnuplot小ワザまとめ

普通に上部、左部、右部、下部の余白でよくないか...?と思うが確かに数値を色々試しているとそういう挙動ではなさそう。

いずれにしても、値を色々変えながら最適なグラフの形を見つけていくのが現実的な使い方。コマンドは以下。

set tmargin at screen 0.85

title

グラフ上部にタイトルをつけることができるが、正直なくていい。

気分で付けたりする。コマンドは set title "Title name"

key

keyとは凡例のことである。1種類の解析結果しかない場合は必要ないが、同じ解析に対して複数種類の対象がある場合は凡例を付ける。この際凡例の位置を定義することができる。

基本的にデフォルトではグラフ内の右上であるが、ものによってはグラフの線と凡例が重なることがある。そういう場合、筆者はグラフの下部に凡例を表示している。凡例の位置は以下のコマンドで決めることができる。

  • 左右位置: { left | center | right }

  • 上下位置: { top | center | bottom }

  • グラフ内外: { inside | outside }

belowは上記のオプションとはまた別物であるが、説明は省く。というか筆者も理解できていない。とりあえずグラフの下部に凡例をつけるという認識でいい。

また並び方も指定することができる。

  • 凡例並べ方: { horizontal | vertical }

verticalの場合は凡例を縦に並べる。反対にhorizontalは凡例を横に並べる。にも関わらず、horizontalはなぜか横の行をできるだけ少なく使おうとするらしい。maxrowsあるいはmaxcolsオプションで変更できるようだが、筆者は試したことない。

凡例が必要ない場合は、unset keyとすればよい。

label

その名の通りラベル名。xlabelであればx軸の、ylabelであればy軸の名前を決めることができる。

set xlabel "r (nm)"とすればよい。

tics

ticsとは目盛りのこと。xticsではx軸に目盛りをつけることができる。

mirrorオプションをつける場合、グラフの下側(x軸)だけでなく反対の上側にも目盛りをつけることができる。片方だけに目盛りをつけたければ、nomirrorとする。そのためコマンドは以下。

set xtics nomirror

また set xtics 10とした場合、10間隔で目盛りを刻むことができる。

さらにmticxというコマンドもあり、目盛りの間により細かい副目盛りを刻むこともできる。

set mtics 10とした場合、主目盛りの間隔の間に10個の副目盛りを刻む。mticsとticsでは引数に与える数字の意味が異なるので注意。

目盛り(副目盛り)が必要ない場合はunset (m)ticxとする。

format

目盛りにつける数値の形式を決めることができる。

set format y "%2.1f"とした場合、**「y」軸目盛の数値を定義し、全「2」桁で小数点以下「1」**桁で表示するという意味である。

ちなみにfは書式指定のための文字であり、「e, f, g」のいずれかを記述する。意味は以下の通り。

  • e: 指数表示

  • f: 小数表示

  • g: 自動

ちなみに特に指定しなければデフォルトとしてgになるらしいが、どういう基準で自動的に表示方法が決まるのかは分からない。

とにかくeかfを使い分ければよい。

plot

プロットのためのコマンド。最も重要なコマンドであり、オプションが訳分からないくらいある。ので、現状使いそうなオプションだけ紹介する。

冒頭で述べたように基本的な使い方はp "sample.txt" w lである。線ではなく点で表示したければ、with linesではなくwith pointsあるいは w p とすればよい。

さて、ここにオプションを足していく。

using X:Y (U X:Y)

プロットに使用する列を選択できる。using X:YとするとファイルのX列目をx軸に、y列目をy軸にプロットする。

しかし基本的に1つの解析では2列が普通であり(時間経過に対するエネルギー変化とか、動径に対する分布とか)、あまりこのオプションを使う機会は少ないかもしれない。

入力ファイルに数値が2列しかなければこのオプションを使わなくてもデフォルトで1列目をx軸に、2列目をy軸にプロットしてくれる。

axis

けっこうマイナーなコマンド。

今の例では動径に対して分布と配位数の2つがプロットされているためy方向のラベルが2つあるが、基本的にはx1つに対してy1つである。そのため通常はこのコマンドを使用しないが、今のような状況ではこのコマンドが必要になる。

axis x1y1とした場合、下側のx軸と左側のy軸にプロットができる。axis x1y2とした場合、下側のx軸と右側のy軸にプロットができる。

lt rgbcolor "red"

lt rgbcolor "red"で線を赤色に変えるコマンド。色を変える変え方は何通りかあるが、筆者はこの書き方で書いている。

そもそも**linetype(lt)**で1つのコマンドである。線の種類を変えることができ、色を変えるだけでなく線の太さなども変えることができる。また類似コマンドとしてpointtype(pt)もある。こちらは点種。点の色や形を変えることができる。

ただこれらについて説明していると日が暮れるので、とりあえずここまでにする。

linetypeコマンドに対してrgbcolorというオプションがあり、色の名称を指定することでその色に線の色を変更可能。

ちなみに色はかなり細かく分類されており、絶妙な色でもググれば名前が色々出てくるので時間がある時に眺めてみるとよい。

title

凡例の名前である。特に言うことなし。タイトルが不要であればnotitleとすればよい。

,

これは画面についたゴミではない。1つのコマンド(?)である。プロットしたい対象がいくつかある場合、「,」で区切ることで複数のプロットが可能になる。

\

これもゴミではない。行の末尾につけることで「1行で本当は書きたいけど長すぎてスクリプトが見にくくなる」という時に、「\」を書くことで、次の行とまとめて1行と見なしてくれる。

offset

コマンドというより、各コマンドに含まれるオプションである。offsetに数値を渡すことでその数値に応じてラベルなどの文字の位置を制御できる。これもmarginと同じで色々数値を変えながらプロットしていき、最適な数値を見つけるべし。

font

こちらも各コマンドに含まれるオプション。文字の種類や大きさを変えることができる。文字の種類は何を使うという決まりはないが、筆者は"Times New Roman"を使っている。あとは"arial"とかがメジャーかもしれない。フォントも特に決まりはなく、発表の資料で見えるサイズなら何でもいい。こういうのは研究室によってちゃんと決まっているはずなのだが、あいにくうちの研究室はガバガバなので何も言われていない。