箱ひげ図について、ggplot2の使い方に着目しながら見ていきます。
100名の被験者について、各3つの条件を適用した結果を示すとします。
各条件での箱ひげ図をプロットし、個々のデータポイントを上書きしていきます。
特定の条件の被験者とで、そのマーカーや色を分けることにします。
以前の記事を参考に、次のようなスクリプトを書いてみました。
x<-rnorm(100,100,100) y<-rnorm(100,300,120) z<-rnorm(100,500,80) len<-length(x) d<-data.frame( cond=c(rep("Small",len),rep("Large",len),rep("Total",len)) ,rate=c(x,y,z)) dat<-transform(d, cond=factor(cond,levels=c("Small","Large","Total"))) #描画順を整える。 barcols<-"white" boxcols<-"lightcyan2" dotcols<-rep(c(rep("magenta",length(x)-1),"blue"),3) dtshape<-rep(c(rep(1,length(x)-1),16),3) dtstrk<-rep(c(rep(1,length(x)-1),1),3)
3つの文字列要素が100ずつ含まれる「cond」と、ランダムな数字300個の「rate」の2列によりなるLong型のデータフレーム「dat」を作成しました。
このまま箱ひげ図を描こうとすると、列condの3つが、「Large、Small、Total」の順でプロットされます。
試しにlevels(d$cond)とすると、levels: Large Small Total、とアルファベット順で表示されます。
11行目では、factorでカテゴリーを要素とした任意のベクトルを指定し、元のdを新たなdatへ変換しています。
その次に、ggplot2で描画していきます。
g<-ggplot(dat,aes(x=cond,y=rate))+ stat_boxplot(geom='errorbar',width=0.5,lwd=2,color=barcols)+ geom_boxplot(outlier.shape=NA,lwd=2,fill=boxcols,color=barcols)+ geom_point(position=position_jitter(width=0.1),size=3,colour=dotcols ,shape=dtshape,stroke=dtstrk)+ theme(panel.background=element_rect(fill="gray80") ,axis.title.x=element_text(size=20) ,axis.title.y=element_text(size=20) ,axis.text.x=element_text(size=15) ,axis.text.y=element_text(size=15) )+ labs(x="",y="") plot(g)
geom_boxplot()のみでは上下の平行な線分が描かれないので、stat_boxplot()でそのエラーバーを設定しています。
エラーバーは上下の平行線が垂直に交わるような「エ」状なので、エラーバーの上に箱ひげ図を重ねています。線の太さは、それぞれ同一の「lwd(line width)」パラメータを与えることで合わせてあります。
geom_point()では、shapeでマーカーの形状、strokeでマーカーの線の太さを指定しています。
マーカー種はR組み込みのpchパラメータと一緒な様子。
参考:53. グラフィックスパラメータ(弐)
今回の例では、一つのデータポイントのみを他と異なるドットで区別しています。
マーカーの種類(shape)、サイズ(size)、色(colour)、線の太さ(stroke)は、ベクトルで個別に任意で指定できます。
上の15~17行目では、1~99の要素まで同一で、最後の要素のみ他と異なるマーカー種、色、線の太さを与えています。
theme()では背景の灰色、xy軸タイトルと目盛りのフォントサイズを指定しています。
軸や目盛りの調整についてはこちらを参照。