ヒストグラム

Rにてヒストグラムを描く。Rにはヒストグラムを描くライブラリーが標準でインストールされている。コマンド hist にて、hist(ベクトル) のように、データが格納されているベクトル形式の変数を指定することで描くことができる。

以下のような、要素数が75、80、70のデータABおよびCが得られたときのヒストグラムを描く。

0.482 0.768 0.678 0.557 0.623 0.563 0.649 0.575 0.735 0.547 0.605 0.660 0.480 0.623 0.451 0.607 0.455 0.620 0.591 0.671 0.626 0.628 0.624 0.479 0.546 0.574 0.625 0.605 0.493 0.635 0.587 0.664 0.700 0.613 0.645 0.456 0.532 0.667 0.527 0.571 0.574 0.682 0.702 0.599 0.523 0.487 0.576 0.716 0.440 0.737 0.637 0.519 0.554 0.660 0.479 0.586 0.620 0.538 0.618 0.544 0.544 0.521 0.509 0.580 0.700 0.440 0.375 0.607 0.731 0.534 0.489 0.665 0.508 0.673 0.637
0.481 0.372 0.416 0.374 0.423 0.434 0.460 0.423 0.404 0.313 0.357 0.443 0.351 0.465 0.331 0.381 0.405 0.479 0.273 0.405 0.381 0.440 0.472 0.505 0.483 0.457 0.465 0.403 0.312 0.435 0.379 0.402 0.402 0.439 0.392 0.394 0.314 0.373 0.427 0.422 0.379 0.397 0.408 0.343 0.422 0.397 0.402 0.391 0.434 0.460 0.390 0.430 0.444 0.382 0.428 0.400 0.439 0.357 0.385 0.357 0.392 0.409 0.320 0.469 0.396 0.377 0.388 0.449 0.521 0.373 0.499 0.428 0.440 0.347 0.433 0.409 0.449 0.238 0.369 0.389
0.376 0.202 0.274 0.174 0.251 0.230 0.064 0.285 0.268 0.240 0.319 0.135 0.210 0.303 0.283 0.201 0.079 0.208 0.276 0.229 0.237 0.263 0.311 0.295 0.318 0.134 0.094 0.258 0.352 0.140 0.233 0.212 0.217 0.237 0.146 0.230 0.164 0.251 0.055 0.197 0.198 0.133 0.254 0.246 0.276 0.389 0.143 0.159 0.211 0.375 0.278 0.334 0.302 0.298 0.265 0.121 0.276 0.112 0.204 0.259 0.286 0.154 0.137 0.214 0.281 0.161 0.147 0.168 0.280 0.278

これらのデータをそれぞれコピーし以下のように打つことでデータをRに読み込む。

1|$A=scan("clipboard")
2|$B=scan("clipboard")
3|$C=scan("clipboard")

このように読み込んだデータについて、データAのヒストグラムを描くには、最も簡単には以下のようにコマンドを打つ。

1|$hist(A)

結果は以下のようになる。

ヒストグラムデフォルト

コマンド hist には様々なオプションが用意されており、それらを用いるとより綺麗なグラフが描ける。オプション breaks では引数にベクトルを読み込むことでヒストグラムの横軸の範囲と分割の幅 (bin) を指定できる。すなわち、ヒストグラムの階級数と階級幅を変えるオプションであり、ここで seq(0,1,0.05) を指定すると 0 から 1 までの範囲を 0.05 ずつbin分けしたヒストグラムを描くことができる。main ではグラフのタイトルを指定する。xlab ではX軸の名前を指定する。ylim にはベクトルを指定することで、Y軸の範囲を指定する。col には色名を指定することでヒストグラムのバーの色を指定できる。ここには、'blue' のように色名をしていることもできるし、以下のように RGB を指定することもできる。

1|$hist(A, breaks=seq(0,1,0.05), main="Histogram", xlab="range", ylim=c(0,30), col="#993435")

以下のように表示が変わる。

ヒストグラム2

データの階級数を客観的に決定するための指標として、スタージェスの公式がある。スタージェスの公式では、データの個数を n として階級数 k を以下のように決定する。コマンド hist はデフォルトではこの式に基づいて階級数および階級幅を決定している。

k\approx 1+\log_2{n}

ただし、ヒストグラムはデータの分布の様子を直感的に掴むための描画であるため、上式はあくまで大体の目安として用いるに留め、データを最も理解し易い形で表現できるような階級数および階級幅を解析者が決定すべきである。

次に、コマンド 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() を打つとグラフを線に枠線が表示される。

1|$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)
2|$hist(A, breaks=seq(0,1,0.05), main="Histogram", xlab="range", ylim=c(0,30), col="#993435")
3|$box()

結果は以下のようになる。

ヒストグラム4

次に、データBおよびCを加えて複数個のデータからなるヒストグラムを作成する。3行目までは上と同様にコマンドを打つ。4行目および5行目ではそれぞれデータBおよびCを hist() コマンドにて描画するが、このときにオプション add=T を指定するとデータAが描画されたヒストグラムにこれらのデータが上書きされる。

1|$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)
2|$hist(A, breaks=seq(0,1,0.05), main="Histogram", xlab="range", ylim=c(0,30), col="#993435")
3|$box()
4|$hist(B, col="#edae00", add=T)
5|$hist(C, col="#539952", add=T)

結果は以下のようになる。

ヒストグラム5

棒の色を透過させるには col にて指定するRGBの最後の2桁に透過度をあらわす値を追加する。棒に斜線を引きたい場合は density 値を指定する。値に応じて斜線の本数が変化する。棒の枠線の色は border にて指定する。色名でも RGB でも指定できる。凡例は legend() にて追加する。

1|$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)
2|$hist(A, breaks=seq(0,1,0.05), main="Histogram", xlab="range", ylim=c(0,30), col="#99343550")
3|$hist(B, density=10, col="#edae00", add=T)
4|$hist(C, col="#539952", border="#539952", add=T)
5|$legend("topright", legend=c("A", "B", "C"), col=c("#993435", "#edae00", "#539952"), pch=16)

結果は以下のようになる。

ヒストグラム6

オプションには以下のようなものがある。

OptionDescriptionUsage example
xヒストグラムを描きたいデータをベクトル形式で指定x=A
breaks階級数と階級幅を指定。ベクトルで指定することもできるし、"Sturges"、"Scott"、"FD" 等の階級数を計算するアルゴリズムを示す文字列を指定することもできる。breaks=seq(0,1,0.01)
freqTかFで指定。デフォルトはT。Tの場合、ヒストグラムの縦軸が頻度を示し、Fの場合、確率密度を示す。freq=T
include.lowestTまたはFで指定。Tの場合かつ以下の right で T を指定した場合、上の breaks で定めた範囲の開始値と一致する値を最小階級に含める。Fの場合は含めない。Tの場合かつ right=F の場合、breaks で定めた最大の分割値と一致する値を最大階級に含める。Fの場合は含めない。デフォルトはF。include.lowest=F
rightTまたは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"
xlabX軸ラベルを指定xlab="price"
ylabY軸ラベルを指定ylab="frequency"
xlimX軸の範囲を指定xlim=c(0,100)
ylimY軸の範囲を指定ylim=c(0,1)
axesTまたはFで指定。Tの場合、XおよびY軸が描かれる。axes=T
plotTまたは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 の数値で指定。1 を指定するとExcelのデフォルトと等価las=1

※ デフォルトでは全軸の項目ラベル (目盛) は各軸に対して平行。"las=1"を指定すると、各項目 (目盛) が全て水平に位置する。

このエントリーをはてなブックマークに追加

Site search

ページのトップへ戻る