2012-05-08 38 views
19

GGplot2セミナーhttp://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdfから図を再作成しようとしています。ggplot2 - ジッタと位置が混在する

この場合、ジッタがかかったジッタデータポイントを使用して例5を生成しようとしています。コードを実行すると、ポイントは正しいラインの周りに集中しますが、ジッタはありません。

ここにはプレゼンテーションのコードがあります。

set.seed(12345) 
hillest<-c(rep(1.1,100*4*3)+rnorm(100*4*3,sd=0.2), 
     rep(1.9,100*4*3)+rnorm(100*4*3,sd=0.2)) 
rep<-rep(1:100,4*3*2) 
process<-rep(rep(c("Process 1","Process 2","Process 3","Process 4"),each=100),3*2) 
memorypar<-rep(rep(c("0.1","0.2","0.3"),each=4*100),2) 
tailindex<-rep(c("1.1","1.9"),each=3*4*100) 
ex5<-data.frame(hillest=hillest,rep=rep,process=process,memorypar=memorypar, tailindex=tailindex) 
stat_sum_df <- function(fun, geom="crossbar", ...) {stat_summary(fun.data=fun, geom=geom, ...) } 

dodge <- position_dodge(width=0.9) 
p<- ggplot(ex5,aes(x=tailindex ,y=hillest,color=memorypar)) 
p<- p + facet_wrap(~process,nrow=2) + geom_jitter(position=dodge) +geom_boxplot(position=dodge) 
p 
+1

Didzis Elfertsは 'ggplot2バージョン1.0.0で利用可能なposition_jitterdodge'を使用して、より良い答えを提供していることを考えると、あなたは私の答えをアン受け入れ、Didzis Elfertsが提供する答えを受け入れる必要があります。 –

答えて

27

EDITposition_jitterdodgeを使用してggplot2バージョン1.0.0とのより良い解決策があります。 @Didzis Elfertsの答えを見てください。 dodge.widthは覆い焼きの幅を制御し、jitter.widthはジッタの幅を制御することに注意してください。

PDFでグラフがどのようにコードを生成したのかよくわかりません。

しかし、このようなことがあなたの後ろのものに近くなるのですか?

tailindexmemoryparを数値に変換します。それらを一緒に追加します。結果はgeom_jitter層のx座標になります。おそらくもっと効果的な方法があります。また、geom_boxplotgeom_jitterをどのようにかわすことがあり、ジッターがないことを知りたいのですが、pdfのグラフが生成されます。 ggplot2バージョン1.0.0

library(ggplot2) 
dodge <- position_dodge(width = 0.9) 
ex5$memorypar2 <- as.numeric(ex5$tailindex) + 
    3 * (as.numeric(as.character(ex5$memorypar)) - 0.2) 

p <- ggplot(ex5,aes(x=tailindex , y=hillest)) + 
    scale_x_discrete() + 
    geom_jitter(aes(colour = memorypar, x = memorypar2), 
    position = position_jitter(width = .05), alpha = 0.5) + 
    geom_boxplot(aes(colour = memorypar), outlier.colour = NA, position = dodge) + 
    facet_wrap(~ process, nrow = 2) 
p 

enter image description here

+0

ありがとう、私はggplot2の中にエレガントな方法があることを望みますが、この回避策はすべて完了します。再度、感謝します! – user1381239

40

このような状況のために作られposition_jitterdodge()という新しいポジションがあります。この位置はgeom_point()の内部で使用し、の内部にはfill=を使用して、どの変数を使用してデータを削除するかを示す必要があります。引き渡し引数の幅を制御するには、dodge.width=を使用する必要があります。

ggplot(ex5,aes(x=tailindex ,y=hillest,color=memorypar,fill=memorypar)) + 
     facet_wrap(~process,nrow=2) + 
     geom_point(position=position_jitterdodge(dodge.width=0.9)) + 
     geom_boxplot(fill="white",outlier.colour = NA, 
         position = position_dodge(width=0.9)) 

enter image description here

+0

このポストをありがとう。これは非常に役に立ちます。私は現在、自分のコードを書いており、うまくいきます。しかし、私はどういうわけか外れ値のために黒色になります。潜在的な原因は何かを推測できますか? – jazzurro

+1

黒色は異常値のデフォルト色です。 'geom_boxplot()'のこのコードでは、 'outlier.colour ='は 'NA'に設定されて表示されません。 –

+1

こんにちは、私は解決策を見つけました。 'outlier.colour'は色ではなく色でなければなりません。アメリカの呪文はここで好まれていないようです。お返事をありがとうございます。 :-) – jazzurro

関連する問題