応用編
ファイルからデータを読み込む(using, every
)
グラフを表示したいのは形がわかっている関数ばかりではありません。
ファイルに保存してあるデータを読み込んでそれをグラフにする時も当然あるでしょう。
これにもやはりplot
コマンドを用います。
univ-19people.dat
というファイルを例に説明します。
# 大学入学人数 (千人)
# 年 18歳人口 入学者人数
1955 1,682 136
1960 1,998 167
1965 1.948 250
1970 1,947 333
1975 1,561 424
1980 1,580 412
1985 1,556 412
1990 2,005 492
1995 1,773 569
2000 1,511 600
2005 1,365 604
2010 1,214 619
2015 1,200 618
さて、reset
等でこれまでの設定を無効にしておいてから、
データファイルに書かれているデータが複数列ある時、特に何も指定しなければ、1列目が\(x\)軸、2列目が\(y\)軸とみなされます。
列を指定してプロットする場合には、plot
コマンドにusing
という引数を付けます。
例えば1列目のデータを\(x\)軸、3列目のデータを\(y\)軸にとってグラフを描く場合には
また、using
はそれぞれのデータの各列に対応した値を列番号に$
をつけて表すことができます。
例えば1列目のデータは$1
、2列目のデータは$2
で表されます。
これを利用することによって、各列のデータをgnuplot上で演算してグラフに表示させることができます。
例として、上の「18歳人口と大学入学人数」のデータにおいて2行目(18歳人口)と3行目(入学者数)の演算で「大学入学者数の18歳人口に対する比率」という値をグラフ表示させることができます。 この場合の書式は次のようになります。
なおw l
はwith lines
の省略形です。
デフォルトでは、スタイルはpoints
になります。
これを変更する場合には
なお、スタイルとしてlines(points)
を設定した場合でも、データファイルが空行(何も書かれていない行)を含んでいると、空行の直前のデータと直後のデータの間には線は引かれません。
軸の目盛をかえる(set x(y)tics
)
データファイルで使っている単位と、描きたいグラフの単位が異なっていることはよくあることです。
このような場合にはset xtics
(またはytics
)コマンドを使って目盛の振り方を変更します。
univ-19people.dat
の1列目は西暦表示となっていますが、これを元号に直すには以下のようにします。
gnuplot> set xtics('S25' 1950, ' ' 1955, 'S35' 1960, ' ' 1965, 'S45' 1970, ' ' 1975, 'S55' 1980, ' ' 1985, 'H02' 1990, ' ' 1995, 'H12' 2000, ' ' 2005, 'H22' 2010, ' ' 2015, 'R2' 2020)
目盛りの値には元ファイルの値を用いつつ目盛りの間隔を変更したい場合には、set xtics <刻み幅>
とします。
引数なしに単にset xtics
とした場合には、目盛は標準(自動指定)のものに戻ります。
目盛が不要の場合にはunset tics
とします。
また、xtics font "フォント名,フォントサイズ"
とすればフォントサイズや種類を変えることができます。
デフォルトのフォントサイズは小さめなので、スライド用のグラフを作成するときなどはこれを使用して目盛を読み取りやすくしましょう。
普段は表示されていませんが小目盛の設定もでき、mxtics <分割数>
とすると小目盛の数を変更できます。
3次元プロット
gnuplotでは3次元のグラフも作成することができます。
3次元プロット(splot, set view
)
3次元プロットする際にはsplot
というコマンドを使います。
デフォルトでは視点の位置は\(x\)軸から\(60^{\circ}\)、\(z\)軸から\(30^{\circ}\)の地点になります。
これを変更するにはset view
コマンドを用います。
また、このままではメッシュ数が少なすぎて、あまり立体感がありません。 そこで
としてみてください。 デフォルトではx,yともに10分割だったものが、かなり細かく描画されていることが分かります。コンタープロット(set contour(surface), set contrparam
)
コンタープロットとは等高線地図を描くことです。 等高線地図を描くには3次元データをプロットする時に
と設定します。 すると、\(xy\)平面上に等高線地図が描かれます。等高線を描く際の様々なパラメタ(等高線を描く際の近似の仕方、等高線の開始値、幅、終了値等)を変更するにはcntrparam
の値を設定します。
例えば
cntrparam
のオンラインマニュアルを見て下さい。
カラーのグラデーション表示にする(set pm3d
)
三次元の図をカラーのグラデーションにする方法としてpm3d
というものがあります。
ちなみに、このモードをやめるときは
とすればもとのモードになります。グラフの曲面を描かず、等高線のみを\(xy\)平面に投影したい、という場合があるでしょう。
その場合にはset pm3d map
としておきます。
データを読み込んで3Dプロットを作る
データファイルから値を読み込んで3次元プロットを作ることもできます。 2次元との違いは、3次元データなので3列のデータを用意しなければならない点です。 例えば
# x y z
0 0 0
0 1 1
0 2 4
0 3 9
1 0 1
1 1 2
1 2 5
1 3 10
2 0 2
2 1 3
2 2 6
2 3 11
3 0 3
3 1 4
3 2 7
3 3 12
data3d.dat
)があったとすると、plot
コマンド同様
とすればよいです
(注:バージョンによってはsplot
の前にset parametric
を設定しなければならないかもしれません)。
with line
をつければ線画になります。
ファイルに空行で区切られた同数のデータが複数書かれている場合、スタイルとしてlines
(points
)を指定するとデータを格子上に結んだグラフが描かれます。