GNUPLOTでグラフを描く

GNUPLOTはデータや式をグラフにするために使われる基本的なソフトウェアである。 グラフ作成ソフトはほかにもいろいろあるが、ここではサイバーメディアセンターの LINUX上で使える標準的なものとしてGNUPLOTを採用する。

起動と修了

LINUXのターミナルでgnuplotコマンドを入力する。
$gnuplot
例によって、$はコマンドプロンプトである(実際の画面ではもっと長いプロンプトが出ているかもしれない)。 すると、そのターミナルでGNUPLOTGが起動する。起動したときの画面は以下のようになっているはずだ。
$ gnuplot

	G N U P L O T
	Version 3.8e patchlevel 1
	last modified Mon Dec 18 09:25:03 CET 2000
	System: Linux 2.2.17-0vl10

	Copyright(C) 1986 - 1993, 1999, 2000
	Thomas Williams, Colin Kelley and many others

	This is a pre-version of gnuplot 4.0. Please refer to the documentation
	for command syntax changes. The old syntax will be accepted throughout
	the 4.0 series, but all save files use the new syntax.

	Type `help` to access the on-line reference manual
	The gnuplot FAQ is available from
		http://www.gnuplot.org/faq/

	Send comments and requests for help to 	Send bugs, suggestions and mods to 


Terminal type set to 'x11'
gnuplot> 
最後の行はGNUPLOTのコマンドプロンプトである。これ以降の入力はすべてGNUPLOTへの命令とみなされる。 GNUPLOTを修了するにはexitコマンドを使う。
gnuplot> exit
これでふたたび、元のターミナルのコマンドプロンプトに戻るはずである。

簡単なグラフ

たとえば、関数sin(x)のグラフをとりあえず描きたければ、plot命令を使って
gnuplot> plot sin(x)
でよい。グラフが表示されただろう。 横軸xの範囲や縦軸の範囲などはGNUPLOTが勝手に調整してくれる。
もし、xの範囲を指定したければ、set xrange命令を使う
gnuplot> set xrange [-pi:pi]
gnuplot> plot sin(x)
GNUPLOTはpiを円周率と知っているので、これで横軸の範囲が-πからπに設定され、次の plot命令で実際に描画が行われる。 もちろんset xrange [0:5]のように普通の数値で範囲を指定してもよい。 縦軸も同様に set yrange [-1.5:1.5] などのように設定できる。

式はおおむねCと同じように書くことができる。たとえば、x2を描きたければ
gnuplot> plot x*x
でよいし、
gnuplot> plot x*sin(x)*sqrt(x*3)
などの複雑な式でもよい。最後のsqrtは平方根である。

1次元データをプロットする

次にファイルからデータを読んでプロットしよう。 たとえば、
2
3.2
4
6.2
10
1
5
というデータがdata1というファイルにはいっているとすると、
gnuplot> plot "data1"
で、データをプロットしてくれる。この場合、データは"点"で描かれる。 もし、データを線で結んだグラフが欲しければ
gnuplot> plot "data1" with line
また、"点"と線の両方が必要なら
gnuplot> plot "data1" with linesp
でよい。

2次元データをプロットする

次に、一行にふたつのデータを含むファイル、たとえば
0.1   5
0.2   3.2
0.3   4
0.4   6.2
0.5   10
0.6   1
0.7   0
というデータがdata2というファイルにはいっているとすると(ここでは 一つめのデータを連続な値にしたが、そうである必要はない)、
gnuplot> plot "data2"
とすることにより、各行の第一データをxの値、第二データをyの値として グラフが描かれる。線でつなぐやりかたなどは1次元データの場合と同じである。

印刷のためにポストスクリプト形式でファイルに出力する

Gnuplotは初期状態でグラフを画面に描く。レポート提出などのためには印刷したいだろうし、また、 TEX文書に取り込むなどの処理をしたいこともあるだろう。 その場合には、Postscriptとよばれる形式でファイルに出力するのが標準的な方法である。 グラフを出力したいファイル名をたとえば graph1.ps とすると(ファイル名は最後を .ps に しておくのがよい)、出力のための準備として、まず以下の二行でpostscript形式と出力ファイルを宣言する。
gnuplot> set terminal postscript
gnuplot> set output "graph1.ps"
TEXに取り込んだり、ほかの文書に貼りこんだりする場合は EPS (encapsulated postscript)とよばれる 形式のほうが便利。そのときは上の二行は
gnuplot> set terminal postscript eps
gnuplot> set output "graph1.eps"
とする。ファイル名の最後も .epsにしておくとなにかと吉。
さて、よく誤解されるのだが、この操作によってこれ以前に画面に描いたグラフが graph1.ps という ファイルに自動的に格納されるわけではない。出力ファイルを宣言して以降に行なった操作の結果がファイルに 格納される。したがって、この時点で改めてplot命令を使ってプロットをしないかぎり、 ファイルには何も書き込まれない。
plot命令を実行すれば、その結果がファイルに書き込まれる(今度は画面には出ない。あるいは 既に画面にグラフが描かれているなら、それはそのまま)。 もし、既に一度画面に描いたグラフと同じものを描くのであれば、replot命令が使える。 これは直前のplot命令を繰り返すのと同じ。
gnuplot> replot
終了したら、再び出力を画面に切り替えておく
gnuplot> set terminal x11
ファイルに書き込まれたグラフは、ファイルマネージャでファイルをダブルクリックすれば見ることができ、 印刷もできる。
なお、ファイルマネージャを使わない場合はgvを使って
$gv graph1.ps
と入力すれば同じ結果が得られる(これはgnuplotの中で行なうのではない)。
なお、gnuplotは非常に多くの機能を持っている。これを説明しきる余裕はないが、便利なツールなので、 使えるようになるといいだろう。多くの情報をネットワーク上で見つけることができる。 たとえば、
http://art.aees.kyushu-u.ac.jp/members/kawano/gnuplot/
日本語で書かれた親切なサイト。
また、gnuplotの本家は http://www.gnuplot.info/
なのだが、このサイトは読むのが大変