実際に演習で必要となるグラフは、計算結果や実験結果をグラフ化するわけだから、数式を与えるのではなく、データファイルから作成することになるだろう。その方法を説明する。
「急カーブ」のマークがついている節は、いくぶん高度な内容を扱っている。
データファイルは、数字を空白(タブ、スペースなど。複数可)で区切って並べただけの、単純な形式にする。具体的には、次のようなデータがそうである。 (日本の総人口と、子供の人口のデータより)
# population # year total kid 1935 6925 2555 1950 8411 2979 1960 9430 2843 1970 10467 2515 1975 11194 2723 1980 11706 2752 1985 12105 2604 1990 12361 2254 1995 12557 2003 1996 12586 1969 1997 12595 1951 1998 12635 1918
間に空白があれば、列がきれいにそろっている必要はない。1、2行目の、行頭が"#
"ではじまっている行はコメント行で、GNUPLOTからは無視される。
演習の計算の場合は、計算結果のファイルの中から、必要な部分を見つけて切り出すことになるだろう。
データファイル名が"population.dat"だとする。GNUPLOTに次のようなコマンドを与える。
gnuplot> plot "population.dat"
plotコマンドに、データファイル名をダブルクオート(二重引用符)で囲って与える(シングルクオートでも良い)。すると、下の図のようなグラフが表示されるはずである。
データ列をグラフにした例1(日本の人口の推移)
データファイルの1列目を横軸に、2列目を縦軸に取ってグラフを描いていることが分かる。3列目以降を使う方法は後で述べることにし、まずはこのグラフを加工してみる。
上の図では何のグラフかまったく分からないので、グラフにタイトルをつけたり、x、y軸にラベルをつけるなどして加工してみる。
gnuplot> set title "Variation of Population in Japan" gnuplot> set xlabel "Year" gnuplot> set ylabel "Population (x 10,000)" gnuplot> set grid gnuplot> replot
GNUPLOTはグラフの体裁を変更するためのたくさんの"setコマンド"がある。はじめの3つのコマンドは、グラフにタイトルやラベルをつけるためのコマンドである。4行目の"set grid
"は筆者の趣味で、グラフに格子線を張る。
データ列をグラフにした例2(日本の人口の推移)
データファイルをグラフにすると、標準では折れ線グラフではなく、上の図のようにマーカー(点)のグラフになる。折れ線グラフを描くには、次のようにする。
gnuplot> plot "population.dat" with lines
"with lines
"は省略して"w l
"でも構わない。ちなみに線も点も描きたいのであれば、"with linespoints
"と書けばよい。
データ列を折れ線グラフにした例(日本の人口の推移)
なお、ここまで来てもタイトルやラベルの指定が引き継がれていることに注意。 GNUPLOTを終了させたり、タイトル・ラベルの指定を取り消したり、明示的に異なるタイトル・ラベルを指定しないかぎり、指定は引き継がれる。
plotコマンドの範囲指定の場合と同じく、"with lines
" の指定にも、同じ機能を持つsetコマンドがある。
gnuplot> set data style lines gnuplot> plot "population.dat"
繰り返しになるが、setコマンドの指定は、これ以降のすべてのplot コマンドに引き継がれる。つまり、上のような指定をすると、それ以降に別の指定をしない限り、これ以降のプロットが折れ線グラフになる。
上の例では、1列目を横軸に、2列目を縦軸に取った。データファイルには3列目(子供の人口の推移)があるので、それをグラフに描いてみる。
gnuplot> plot "population.dat" using 1:3
"using 1:3
"の部分がポイントで、1列目を縦軸に、3列目を横軸に取るよう指定している。
"using 1:3
"を省略して"u 1:3
"でも構わない。
データ列の3列目をグラフにした例(子供の人口の推移)
しつこいようだが、ここでもタイトルやラベルの指定が引き継がれていることに注意。また、縦軸の値の幅(値域)が自動的に変わっていることにも注意。ここがGNUPLOTの便利なところだ。
はじめの節で、正弦関数と余弦関数を表示させるのに、次のようなコマンドを使った。
gnuplot> plot sin(x), cos(x)
複数のデータ列を1つのグラフにするのも同じ要領で、カンマで区切って並べればよい。
gnuplot> plot "population.dat", "population.dat" using 1:3
データ列の2列目と3列目をグラフにした例(人口の推移)
マーカーの色と形は、2つのデータ列でそれぞれ異なるものが使われる。
上のグラフの右上についている、グラフのマーカーとデータとの対応を記した部分が「凡例」である。これを分かりやすく変えるには、プロットのときに凡例のラベルを指定すればよい。
gnuplot> plot "population.dat" title "Total", @BACKSLASH@ "population.dat" using 1:3 title "Children"
ここでは2つ新しい機能を使っている。まず title "..."
というのが、凡例のラベルを決めている。ラベルをつけたせいでplotコマンドが長くなったが、バックスラッシュ "\
"(日本語キーボードでは円記号、"\")を行末につけて改行すると、2行以上に渡ってコマンドを書くことができる。
凡例のラベルを変えた例(人口の推移)
さて今回の演習では、構成のよく似たグラフを複数作成することになるはずである。その場合、GNUPLOTを起動するたびごとにタイトルやラベルの指定をいちいちやり直すのは、面倒だし、間違いやすい。そこで、GNUPLOTに与えるコマンドをいったんファイルに書き込んでおき、再利用しよう。
上の人口の推移の例であれば、次のようなファイルを用意しておく。
set title "Variation of Population in Japan" set xlabel "Year" set ylabel "Population (x 10,000)" set grid plot "population.dat" title "Total", @BACKSLASH@ "population.dat" using 1:3 t "Children"
見て分かるとおり、GNUPLOTのコマンドを、ただ並べて書いただけである。以下ではこのコマンドを入れたファイル名を "population.gp" とする。もちろん、ファイル名は任意である。
このデータファイルを利用するには、GNUPLOTのプロンプトに、以下のように指示する。
gnuplot> load "population.gp"
あるいはシェルのコマンドライン(GNUPLOTを起動していない状態)から、
% gnuplot population.gp
のようにして、GNUPLOTの引数に与えてもよい。ただしこの場合は、コマンド行をすべて実行し終わった時点で、GNUPLOTが終了する。
数値計算の結果など、プログラムの出力をグラフにするときは、数値は以下のような指数形式で書かれていることがある。
27 0.5781786E+00 0.5778067E+00 0.9534591E+00 28 0.6090178E+00 0.6086833E+00 0.9470444E+00 29 0.6394267E+00 0.6391276E+00 0.9404997E+00
指数形式は、たとえば 3.5E+02 だったら3.5×102という意味である。この形式のファイルは、GNUPLOTにそのまま読ませることができる。
しかしたとえばSun FORTRANの古いバージョンでコンパイルしたプログラムだと、上の例とわずかに異なる出力をする。
27 0.5781786D+00 0.5778067D+00 0.9534591D+00 28 0.6090178D+00 0.6086833D+00 0.9470444D+00 29 0.6394267D+00 0.6391276D+00 0.9404997D+00
指数の表現が"E"ではなく"D"になっている。「倍精度浮動小数点数」の意味なのだが、この書式のファイルをGNUPLOTに食わせると腹を下す。解決策は単純で、エディタなどを用いてDをEに置き換えることである。
リンクはご自由に。でもメールをくれると嬉しいな。
金野 祥久 konno@researchers.jpLast modified: Fri Feb 18 16:17:07 JST 2000