Rによるヒストグラムの描画
Rにてヒストグラムを描く.R にはヒストグラムを描くライブラリーが標準でインストールされている.コマンド hist にて,hist(ベクトル) のように,データが格納されているベクトル形式の変数を指定することで描くことができる.以下のような,要素数が75,80,70のデータA,B および C に対してヒストグラムを描く.
これらのデータをそれぞれコピーし以下のように打つことでデータをRに読み込む.
$ A=scan("clipboard") $ B=scan("clipboard") $ C=scan("clipboard")
ファイルから読み込むことも可能.その場合は,ファイル名を A.txt するなら以下のように打つ.
$ A=scan("A.txt")
簡単な描画
このように読み込んだデータについて,データAのヒストグラムを描くには,最も簡単には以下のようにコマンドを打つ.
$ hist(A)
結果は以下のようになる.
図の装飾
コマンド hist には様々なオプションが用意されており,それらを用いるとより綺麗なグラフが描ける.オプション breaks では引数にベクトルを読み込むことでヒストグラムの横軸の範囲と分割の幅 (bin) を指定できる.すなわち,ヒストグラムの階級数と階級幅を変えるオプションであり,ここで seq(0,1,0.05) を指定すると 0 から 1 までの範囲を 0.05 ずつbin分けしたヒストグラムを描くことができる.main ではグラフのタイトルを指定する.xlab ではX軸の名前を指定する.ylim にはベクトルを指定することで,Y軸の範囲を指定する.col には色名を指定することでヒストグラムのバーの色を指定できる.ここには,'blue' のように色名をしていることもできるし,以下のように RGB を指定することもできる.
$ hist(A, breaks=seq(0,1,0.05), main="Histogram", xlab="range", ylim=c(0,30), col="#993435")
以下のように表示が変わる.
データの階級数を客観的に決定するための指標として,スタージェスの公式がある.スタージェスの公式では,データの個数を n として階級数 k を以下のように決定する.コマンド hist はデフォルトではこの式に基づいて階級数および階級幅を決定している.
ただし,ヒストグラムはデータの分布の様子を直感的に掴むための描画であるため,上式はあくまで大体の目安として用いるに留め,データを最も理解し易い形で表現できるような階級数および階級幅を解析者が決定すべきである.
次に,コマンド par を用いることでグラフの詳細なグラフィックの調整を行う.las にて軸目盛および各項目の表示スタイルを変更する.las=1 を指定するとX軸およびY軸の全ての数値目盛を水平に表示する.family にて用いるフォントを指定する.xaxs="i" および yaxs="i" を指定するとX軸とY軸の最小値で軸が交差する.さらに,cex.main にてタイトルのサイズを,cex.lab にて軸のラベルのサイズを,cex.axis にて軸目盛のサイズを指定する.font.lab に 2 を指定すると軸ラベルが太字になる.font.axis に 2 を指定すると軸目盛が太字になる.また,3行目のように box() を打つとグラフを線に枠線が表示される.
$ par(las=1, family="Century gothic", xaxs="i", yaxs="i", cex.main=3, cex.lab=1.1, cex.axis=1.1, font.lab=2, font.axis=2) $ hist(A, breaks=seq(0,1,0.05), main="Histogram", xlab="range", ylim=c(0,30), col="#993435") $ box()
結果は以下のようになる.
次に,データBおよびCを加えて複数個のデータからなるヒストグラムを作成する.3行目までは上と同様にコマンドを打つ.4行目および5行目ではそれぞれデータBおよびCを hist() コマンドにて描画するが,このときにオプション add=T を指定するとデータAが描画されたヒストグラムにこれらのデータが上書きされる.
$ par(las=1, family="Century gothic", xaxs="i", yaxs="i", cex.main=3, cex.lab=1.1, cex.axis=1.1, font.lab=2, font.axis=2) $ hist(A, breaks=seq(0,1,0.05), main="Histogram", xlab="range", ylim=c(0,40), col="#993435") $ box() $ hist(B, col="#edae00", add=T) $ hist(C, col="#539952", add=T)
結果は以下のようになる.
棒の色を透過させるには col にて指定するRGBの最後の2桁に透過度をあらわす値を追加する.棒に斜線を引きたい場合は density 値を指定する.値に応じて斜線の本数が変化する.棒の枠線の色は border にて指定する.色名でも RGB でも指定できる.凡例は legend() にて追加する.
$ par(las=1, family="Century gothic", xaxs="i", yaxs="i", cex.main=3, cex.lab=1.1, cex.axis=1.1, font.lab=2, font.axis=2) $ hist(A, breaks=seq(0,1,0.05), main="Histogram", xlab="range", ylim=c(0,40), col="#99343550") $ hist(B, density=10, col="#edae00", add=T) $ hist(C, col="#539952", border="#539952", add=T) $ legend("topright", legend=c("A", "B", "C"), col=c("#993435", "#edae00", "#539952"), pch=16)
結果は以下のようになる.
オプション一覧
オプションには以下のようなものがある.
オプション | 詳細 | 使用例 |
---|---|---|
x | ヒストグラムを描きたいデータをベクトル形式で指定 | x=A |
breaks | 階級数と階級幅を指定.ベクトルで指定することもできるし,"Sturges","Scott","FD" 等の階級数を計算するアルゴリズムを示す文字列を指定することもできる. | breaks=seq(0,1,0.01) |
freq | TかFで指定.デフォルトはT.Tの場合,ヒストグラムの縦軸が頻度を示し,Fの場合,確率密度を示す. | freq=T |
include.lowest | TまたはFで指定.Tの場合かつ以下の right で T を指定した場合,上の breaks で定めた範囲の開始値と一致する値を最小階級に含める.Fの場合は含めない.Tの場合かつ right=F の場合,breaks で定めた最大の分割値と一致する値を最大階級に含める.Fの場合は含めない.デフォルトはF. | include.lowest=F |
right | TまたはFで指定.各階級に含まれる範囲を決定する.デフォルトであるTの場合,左開右閉区間,(a, b],すなわち a < x ≤ b となる.Fの場合,左閉右開区間,[a, b) となる. | right=T |
density | 値を指定.棒に斜線を引く.値の大小で斜線の数をコントロールする. | density=30 |
angle | 上の斜線の角度を指定 | angle=30 |
col | 棒の色を指定 | col="red" |
border | 棒の枠線の色を指定 | col="#ffffff" |
main | ヒストグラムのタイトルを指定 | main="Histogram A" |
xlab | X軸ラベルを指定 | xlab="price" |
ylab | Y軸ラベルを指定 | ylab="frequency" |
xlim | X軸の範囲を指定 | xlim=c(0,100) |
ylim | Y軸の範囲を指定 | ylim=c(0,1) |
axes | TまたはFで指定.Tの場合,XおよびY軸が描かれる. | axes=T |
plot | TまたはFで指定.Tの場合,グラフが描画される. | plot=F |
par | フォント等を設定するグラフィックパラメーターを指定 | par(font.lab=2, font.axis=2) |
cex.main | グラフのタイトルのフォントサイズの指定 | cex.main=4 |
cex.lab | 軸ラベルのフォントサイズの指定 | cex.lab=1.6 |
cex.axis | 目盛のフォントサイズの指定 | cex.axis=1.2 |
las | 軸目盛および各項目の表示スタイルを指定.0,1,2,3の数値で指定.デフォルトでは全軸の項目ラベル (目盛) は各軸に対して平行.las=1 を指定すると,各項目 (目盛) が全て水平に位置し Excel と同じになる. | las=1 |