今回の目標は3種類の果物の月間売上高の推移を次のようにグラフ化することである.
このグラフの作成には次の表データファイルfruits.datを使う. 12行の各行にあるデータは,それぞれ月と,りんご,バナナ,レモンの売り上げ高を表している. データの区切は(何文字かの)空白であることに注意せよ.
# フルーツ年間売り上げ記録(単位 Kt) # グラフ化スクリプト#月 りんご バナナ レモン 1 35 22 10 2 30 19 12 3 25 20 10 4 30 19 19 5 22 28 23 6 15 25 25 7 12 30 33 8 15 29 40 9 20 26 35 10 25 24 25 11 30 23 20 12 38 20 15
演習
エディタで,このデータをファイルfruits.datとして作成せよ.
縦軸(y軸)と横軸(x軸)がそれぞれ何を表しているのか(時間,重さ,金額など)を記載し,その量の単位(年,月,円,ドル,ポンド,グラムなど)を明示する.
グラフの要件を満たしていない``グラフ''を含んだレポートを書く人は,「訓練されていないから笑ってくれ」と言っているようなもので,相当馬鹿にされます.
以下,GNUPLOTはグラフ化のスクリプトファイルおよび必要なデータファイルのあるディレクトリで起動する.
#種別a 種別b 種別c ...... 種別N
A1 B1 C1 ..... N1
A2 B2 C2 ..... N2
.............................
.............................
AM BM CM ..... NM
ここではデータ区切を空白で表しているとする.
student.datとする(表データであることを表すように,拡張子に『.dat』を付けていることに注意).
# スクリプト student.plt # 情報学科の学生数の推移 #1列目 2列目 #年度 人数 1990 202 1991 211 1992 205 1993 220 1994 214 1995 203 1996 213
この表データを使ってグラフを書く(X Windowに出力する)には,次のスクリプトファイルstudent.pltを用意する.
# 学生数の年次推移 set terminal x11 plot 'student.dat' pause -1
データを読み込むために,データファイルを1重引用符『'』で挟んでいることに注意する.
演習
表データstudent.datとスクリプトstudent.pltを作成して,GNUPLOTで表示してみよ.
表データが2列のときには,1列目が横軸(x軸),2列目が縦軸(y軸)となっていることを確かめよ.
また,それぞれの軸目盛の最小値と最大値と表データのデータとの関係を調べよ.
GNUPLOTでは,先の演習で確かめたように,与えられたデータをグラフ化するときに,デフォルトでは座標範囲を自動調節する. つまり,グラフ表示に必要な縦軸,横軸の範囲をグラフ軸範囲の最小値と最大値とする.
グラフ表示するための縦軸や横軸の範囲を次のように指定することもできる.
# 学生数の年次推移 set terminal x11 plot [1989:1997] [200:230] 'student.dat' pause -1
グラフの横軸(x軸)と縦軸(y軸)の目盛範囲の指定には,横軸の最小値をxmin,最大値をxmax,縦軸の最小値をymin,最大値をymaxとすると,次のように書く.
範囲指定値を『[]』のように省略すると,その軸の目盛範囲は自動調節される. たとえば,横軸を自動調節し,縦軸を範囲指定するには次のように書く.[xmin:xmax] [ymin:ymax]
# 学生数の年次推移 set terminal x11 plot [] [200:230] 'student.dat' pause -1
演習
縦横軸の範囲をいろいろに調節してグラフ表示してみよ.
特に明示しなければ,GNUPLOTではグラフの縦軸をy軸,横軸をx軸としている. グラフの軸が何を表しているかをラベルするには,次のようにする.
set terminal x11 set xlabel "入学年次" set ylabel "学生数" plot [] [200:230] 'student.dat' pause -1
ラベル名の指定に2重引用符『"』を使っていることに注意せよ.
GNUPLOTは日本語化されていないために(近日中に可能にします?),ウィンドウに表示させると文字化けするが,LaTeXファイルに出力すれば,ちゃんと漢字表示される.
ラベル名内に『\\』を書くと改行される.
グラフ軸のラベル化は,グラフの要件であることをお忘れなく.# 学生数の年次推移 set terminal latex set output "student.tex" set xlabel "入学年次" set ylabel "情報学科の\\学生数" plot [] [200:230] 'student.dat' pause -1
演習
このスクリプトで生成されたLaTeXファイルstudent.texを適当なLaTeX文書に『\input』して,ラベル名が軸に付けられたグラフの様子をプレビューしてみよ.
withを使う.
表データをグラフ化するときには一般的にはlinespointsを使う (GNUPLOTには,残念ながら棒グラフはない.必要ならimpulsesで代用する).
- lines
- 隣合う点を千でつなぐ.
- points
- 各店の位置にマークを描く.
- linespoints
- linesとpointsの両方.
- impulses
- x軸から点まで垂線を引く.
- dots
- 各点の位置に小さな点を打つ.多くの点の散布図に使うとよい.
- errorbars
- 説明省略.
グラフの表示方式を指定するには,たとえば次のように書く.
表示方式の指定にwithを使っていることに注意する.
# 学生数の年次推移 set terminal latex set output "student.tex" set xlabel "入学年次" set ylabel "情報学科の\\学生数" plot [] [200:230] 'student.dat' with linespoints
これで,点と点を線で結んだ折れ線グラフができる.
演習
表示方式をさまざまに変えて,グラフの様子がどのようになるかを確かめてみよ.
y=x * xとy=5x+20の2つのグラフを-10≦x≦10の範囲で重ねて書くスクリプトである.
縦軸(y軸)の範囲は表略されている([-10:10] []としても同じ).
set terminal x11 plot [-10:10] x * x, 5 * x + 20 pause -1
関数(データ)がコンマ記号『,』で区切られていることに注意する.
さらにコンマで区切って関数を指定してグラフを何重にも重ねることができる.
演習
関数のグラフを重ねて1つのグラフに表してみよ.
set terminal x11
plot [-10:10] x * x,\
5 * x + 20,\
30 - x
pase -1
このように,(1行に書くべき)コマンドを複数行に分けるときには,最終行以外の行の行末にバックスラシュ『\』を書く.
バックスラッシュは必ず各行の最後になければならない.
演習
コマンドを複数行にまたがらせて,グラフを作成せよ.
student2.datがあるとする.
# 経営学科の学生数の推移 #年度 人数 1990 252 1991 261 1992 245 1993 2540 1994 257 1995 246 1996 249
このデータと先の
しかし,これではそれぞれの折れ線が何のデータを表しているかが示されていないので,グラフとしては失格である.
そのためには,次のようにして
titleオプションはwithオプションよりも前になければならない.
表題は2重引用符で囲まれていることに注意する.
演習
一般的に,次のような表データファイル
2次元グラフ(x軸とy軸だけからなるグラフ)を書くためには,この(4列からなる)表データから2列を選び出して,x軸とy軸に割り当てることが必要である.
このために
列の区切りはコロン『
このページの先頭にあったグラフは次のスクリプト
演習
先のグラフ(ページ先頭の図)をLaTeX文書のfigure環境内に張り込んだものを提出せよ.
ただし,図の番号を文中で引用するような適当な文を作成し,\label{...}と\ref{...}を使った相互参照が使われているLaTeX文書であることが絶対条件.
student.datをあわせたグラフを書くには,複数の関数グラフの場合と同じように,データファイルをカンマで区切る.
つまり,次のようなスクリプトを使う.
# 学生数の年次推移
set terminal latex
set output "student.tex"
set xlabel "入学年次"
set ylabel "学生数"
plot [] [200:270] 'student.dat' with linespoints, \
'student2.dat' with linespoints
titleオプションを指定して,グラフの種別を示すことができる.
# 学生数の年次推移
set terminal latex
set output "student.tex"
set xlabel "入学年次"
set ylabel "学生数"
plot [] [200:270] 'student.dat' title "情報学科" with linespoints, \
'student2.dat' title "経営学科" with linespoints
上のように表データを2つ以上使って,グラフの重ねて表示してみよ.一般表データのグラフ化
先の2つの表データは,2つ別々のファイルではなく,次のように合併して1つの表データで表されているのが普通である.
#学生数の推移
#年度 情報 経営
1990 202 252
1991 211 261
1992 205 245
1993 220 254
1994 214 257
1995 203 246
1996 213 249
fruits.datをグラフ化することを考える.
# フルーツ年間売り上げ記録(単位 Kt)
# グラフ化スクリプト
usingオプションを使う.
表データからi列を選び出してx軸に,j列を選び出してy軸にしてグラフを作成するには次のように書く
using i列 : j列
:』で表されていることに注意する.
fruits.pltから得られた.
# フルーツ年間売り上げ記録
set terminal latex
set output 'fruits.tex'
set xlabel "月別集計(1995年実績)"
set ylabel "売上げ高\\(単位:Kt)"
plot [1:12] [0:50] 'fruits.dat' using 1:2 title "りんご" with linespoints,\
'fruits.dat' using 1:3 title "バナナ" with linespoints,\
'fruits.dat' using 1:4 title "レモン" with linespoints
実際に,表データファイルfruits.datから目的の図が得られることを確かめてみよ.
提出課題
レポート課題
次の内容のどれかを表データを調査して作成して,これをGNUPLOTでグラフ化して\LaTeX文書にfigure環境内に取り込め.
図番号を"相互参照"して,そのグラフから読み取れる分析結果を論ぜよ.
いくつグラフを作成してもよい.
ただし,どんな文書を書く場合にも共通する常識として,利用したデータや参考書などの情報の出典を必ず明示すること.
情報処理概論目次