28.2. 簡単なグラフの描き方
さっそく gnuplot でグラフを描いてみましょう。グラフの見栄えをよくする方法は後回しにし、この節ではグラフの描き方を一通り説明します。
関数 y=f(x) のグラフ #
plot というコマンドを使うと関数のグラフを描くことができます。たとえば
plot x**2+3*x+2
と入力すると、放物線 y=x2+3x+2 のグラフが描かれます。
gnuplot では巾乗を ** という記号で表します。3x の 3 と x の間に * が必要であることに注意してください。また
plot sin(x)
と入力すると、サインカーブが描かれます。
sin 以外にも (逆) 三角関数、(逆) 双曲線関数、指数関数や対数関数といった有名な関数は一通り gnuplot 内で使えます。それに加え、自分で関数を定義することもできます。たとえば
f(x)=exp(-x)*sin(x)
と入力すると f(x) が右辺の式で定義されます。このように定義した関数は sin(x) などと同じように扱うことができます。たとえば
plot f(x)
と入力すると y=f(x) のグラフが描かれます。
データのプロット #
今度はデータのプロットをしてみましょう。ターミナルでのファイル操作 (cd コマンドや pwd コマンド) に慣れない人は、すぐ下にある sampledata1.txt へのリンクを右クリックして「リンク先のファイルを別名でダウンロード」というメニューを選び、サンプルファイルをホームディレクトリにダウンロードしてください。
ターミナル操作ができる人向けの補足ですが、gnuplot ではターミナル同様 pwd コマンドでカレントディレクトリの確認が、cd コマンドでディレクトリの移動ができます。以下の説明ではカレントディレクトリにプロットしたいデータファイルが置かれていることを仮定しますが、ディレクトリ操作が分かる人は好きな場所にファイルを置いて構いません。データファイルを扱う際はディレクトリを移動しても良いですし、あるいはデータファイルの場所を相対パスまたは絶対パスで指定しても良いです。ただし gnuplot 内で cd コマンドを打つときは cd “../” のようにパスをシングルまたはダブルクォーテーションでくくる必要があります。このことにだけ気をつけてください。
このサンプルファイルはテキストファイルで、開くと次のように 8 列にわたって数が並んでいます。実際にテキストエディタで開いて確かめてみてください。
#sampledata1.txt
#1列目から順に 月, 平均気圧 (hPa), 降水量 (mm), 最高気温 (℃), 最低気温 (℃), 平均湿度 (%), 平均風速 (m/s), 日照時間 (h)
1 1009.1 3.5 12.2 -1.1 36 2.8 243.9
2 1013.6 151 20.8 -0.8 52 2.9 148.9
3 1010.5 74 20.2 1 47 3.2 214.8
4 1008.9 96 24.8 4.3 50 3.8 204
...
このデータは 2011 年の東京における月ごとの平均気圧 (hPa), 降水量 (mm), 最高気温 (℃), 最低気温 (℃), 平均湿度 (%), 平均風速 (m/s), 日照時間 (h) をまとめた表です。
気象庁のウェブサイト にある気象統計情報から引用し、gnuplot で扱いやすいよう書式を加工しました。
gnuplot はデータを読み込む際に # から始まる行を無視します。sampledata1.txt の場合、1, 2 行目を gnuplot が誤ってデータとして処理しないように冒頭に # をつけています。このように # を使うことで、gnuplot への影響を避けつつ人間にとって見やすいファイルになります。
このデータをグラフにしてみましょう。たとえば第 1 列目を x 座標、第 4 列目を y 座標として点をプロットするには次のように入力します。
plot “sampledata.txt” using 1:4
すると次のようなグラフが描かれます。第 1 列目は月、第 4 列目は最高気温をそれぞれ表すので、このグラフは月ごとの最高気温を描いたものです。
このように using m:n と指定することで m 列目を x 軸、n 列目を y 軸としたグラフを描くことができます。using を省略すると 1 列目が x 座標、2 列目が y 座標となります。同様にして月ごとの最低気温や降水量のグラフも描いてみてください。
なお using は u と省略できます。ですので次のように入力しても、上のグラフと全く同じものが描かれます。
plot “sampledata.txt” u 1:4
複数のグラフのプロット #
グラフとして描きたい関数やデータをカンマで区切って plot コマンドに渡すと、同時にグラフを描いてくれます。たとえば
plot x**2, 2*x-1
とすると y=x2, y=2x-1 の 2 つのグラフが同時に描かれます。
もちろん同時に描けるのは関数のグラフだけでなく、関数のグラフとデータのプロットを同時に行うこともできます。また 3 つ以上のグラフを同時に描くこともできます。
3 次元のプロット #
関数 z=f(x,y) のグラフを描くには splot コマンドを使います。たとえば
splot x2+y2
とすると、回転放物面 z=x2+y2 のグラフが描かれます。
gnuplot の画面内でマウスをドラッグすると視点の変更ができます。やってみてください。また 3 次元のデータプロットも、関数のグラフと同様に splot コマンドで実現できます。