我正在尝试从GGplot2研讨会http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf重新创建一个人物。
在这种情况下,我正在尝试生成示例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
答案 0 :(得分:55)
在ggplot2
版本1.0.0
中,有一个名为position_jitterdodge()
的新职位是针对此类情况而制作的。此位置应在geom_point()
内使用,并且fill=
内应使用aes()
来显示哪个变量可以躲避您的数据。应该使用控制躲避参数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))
答案 1 :(得分:32)
编辑:使用ggplot2
,position_jitterdodge
版本1.0.0有更好的解决方案。请参阅@Didzis Elferts的回答。请注意,dodge.width
控制躲避的宽度,jitter.width
控制抖动的宽度。
我不确定代码是如何在pdf中生成图表的。
但这样的事情会让你接近你所追求的东西吗?
我将tailindex
和memorypar
转换为数字;把它们加在一起;结果是geom_jitter
图层的x坐标。这可能是一种更有效的方法。另外,我想看看如何躲避geom_boxplot
和geom_jitter
,并且没有抖动,会在pdf中生成图表。
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