[追記] いつの間にか hist()
に色がつくようになりました(col="lightgray"
)。以下の col="gray"
は今は不要です。
ヒストグラム(histogram)は度数分布図のこと。
連続量のヒストグラムは,棒どうしをくっつけて描く。
Rでヒストグラムを描く関数は次のものがある:
hist()
truehist()
histogram()
geom_histogram()
日本流(?)のヒストグラムの階級は「○○以上,××未満」とする。数式で書けば,第 $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)