グラフの例:ヒストグラム

[追記] いつの間にか hist() に色がつくようになりました(col="lightgray")。以下の col="gray" は今は不要です。

ヒストグラム(histogram)は度数分布図のこと。

連続量のヒストグラムは,棒どうしをくっつけて描く。

Rでヒストグラムを描く関数は次のものがある:

日本流(?)のヒストグラムの階級は「○○以上,××未満」とする。数式で書けば,第 $i$ 階級は $b_i \leq x < b_{i+1}$ のように,左側の不等号に等号が付く。端の階級といえども $b_{n-1} \leq x \leq b_n$ のように両側を含めたりしない。このルールに従って描くには,標準の hist()right=FALSE, include.lowest=FALSE のオプションを付けて描く。このあたりの設定ができるのは標準の hist() だけだと思うが,0.9999 と 1.0000 を区別する必要のない連続量のヒストグラムを描く際には,このような細部に気遣う必要はない。

標準の hist() のデフォルトでは色が付かないので,col="gray" などとして色を付ける。度数(frequency)でなく密度(density)にする場合は freq=FALSE とする。できるだけ分割点 breaks を指定する(無指定なら適当に設定される)。

例:100点満点のテストの点数が 10, 12, 20, 23, 25, 50, 100 であった。10点きざみの度数分布図を描け(実際にはこのような少数の度数分布図を描く意味はないが,単なる例示のため)。

x = c(10, 12, 20, 23, 25, 50, 100)
hist(x, breaks=(0:11)*10, right=FALSE, include.lowest=FALSE, col="gray")
ヒストグラムの例

この場合,最後の階級に100点を含めてしまうには,次のようにする:

hist(x, breaks=(0:10)*10, right=FALSE, col="gray")
ヒストグラムの例

実際には,もうちょっと工夫して見やすいものにする。

par(mgp=c(2,0.8,0.5))     # 軸マージン(デフォルト: c(3,1,0))
hist(x, breaks=(0:10)*10, right=FALSE, col="gray", main="", xlab="", ylab="", yaxt="n")
axis(2, 0:3, 0:3, las=1)
ヒストグラムの例

[追記] x が整数値をとる場合に各整数値の個数を表すには、棒と棒がくっつかない棒グラフ barplot(table(x)) のほうがいいかもしれません。ただ、table() を使うと、個数 0 の階級が抜けてしまいます。苦肉の策は、いろいろありそうのですが、例:

x = c(1,1,2,2,2,4,5)
h = hist(x, breaks=1:6, right=FALSE, plot=FALSE)
barplot(h$counts, names.arg=1:5)

あるいは:

hist(x, breaks=rep(1:5,each=2)+c(-0.4,0.4), freq=TRUE)

@gnutar 先生がもっと賢いやりかたを考えてくださいました:

barplot(table(c(x,1:5)) - 1)