日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

ヒストグラムと箱ひげ図

今日は中休みということで、簡単なグラフを2つ。
ヒストグラムと箱ヒゲ図。

Rにはhist関数とtruehist関数(MASSパッケージ)があります。両者の違いはここをご覧ください。

> jpeg("hist.jpg",width=720)
> layout(t(1:2))
> hist(iris$Sepal.Length,main="hist")
> 
> library(MASS)
> truehist(iris$Sepal.Length,main="truehist")
> dev.off()


truehist関数は総面積が1に基準化されるので、縦軸が異なります。
あと、truehist関数は色がつきます。

で、histは返り値を持つので、こんなことができます。

> jpeg("hist2.jpg")
> str(x <- hist(iris$Sepal.Length,plot=FALSE))
List of 7
 $ breaks     : num [1:9] 4 4.5 5 5.5 6 6.5 7 7.5 8
 $ counts     : int [1:8] 5 27 27 30 31 18 6 6
 $ intensities: num [1:8] 0.0667 0.36 0.36 0.4 0.4133 ...
 $ density    : num [1:8] 0.0667 0.36 0.36 0.4 0.4133 ...
 $ mids       : num [1:8] 4.25 4.75 5.25 5.75 6.25 6.75 7.25 7.75
 $ xname      : chr "iris$Sepal.Length"
 $ equidist   : logi TRUE
 - attr(*, "class")= chr "histogram"
> hist(iris$Sepal.Length,main="plot the counts",ylim=c(0,max(x$counts)*1.2))
> text(x=x$breaks+diff(x$breaks)[1]/2,y=x$counts,labels=x$counts,pos=3)
> dev.off()


でも、truehistは返り値がありません。

  • 箱ひげ図

Rを使って良かったな〜と思えた関数です。
エクセルで箱ひげ図を描くときは結構、苦労しました。

> jpeg("boxplot.jpg")
> boxplot(iris[,-4])
> dev.off()

で、boxplotも返り値を持ちます。

> jpeg("boxplot2.jpg")
> str(x <- boxplot(iris[,-4],plot=FALSE))
List of 6
 $ stats: num [1:5, 1:4] 4.3 5.1 5.8 6.4 7.9 2.2 2.8 3 3.3 4 ...
 $ n    : num [1:4] 150 150 150 150
 $ conf : num [1:2, 1:4] 5.63 5.97 2.94 3.06 3.9 ...
 $ out  : num [1:4] 4.4 4.1 4.2 2
 $ group: num [1:4] 2 2 2 2
 $ names: chr [1:4] "Sepal.Length" "Sepal.Width" "Petal.Length" "Species"
> boxplot(iris[,-4],outline=FALSE,ylim=c(0,max(x$stats)*1.2),boxwex=.5)
> lapply(2:ncol(iris)-1,function(i) points(x=i+rnorm(nrow(iris),mean=0,sd=.02),y=iris[,i],pch=20,cex=.5))
> lapply(2:ncol(iris)-1,function(i) text(x=rep(i-.25,3),y=x$stats[2:4,i],labels=x$stats[2:4,i],pos=2,cex=.8))
> dev.off()