ggplot2 – jitter y posición esquivar juntos

Estoy intentando recrear una figura de un seminario de GGplot2 http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf .

En este caso, bash generar el Ejemplo 5, con puntos de datos agitados sujetos a una esquiva. Cuando ejecuto el código, los puntos se centran alrededor de la línea correcta, pero no tienen jitter.

Aquí está el código directamente de la presentación.

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 

EDITAR : Hay una mejor solución con ggplot2 versión 1.0.0 utilizando position_jitterdodge . Ver la respuesta de @Didzis Elferts. Tenga en cuenta que dodge.width controla el ancho de la esquiva y que jitter.width controla el ancho del jittering.

No estoy seguro de cómo el código produjo el gráfico en el pdf.

Pero, ¿algo así te acerca a lo que estás buscando?

Convierto tailindex y memorypar a numérico; agrégalos juntos; y el resultado es la coordenada x para la capa geom_jitter . Probablemente haya una forma más efectiva de hacerlo. Además, me gustaría ver cómo eludir geom_boxplot y geom_jitter , y sin agitación, producirá el gráfico en el 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 

enter image description here

En ggplot2 versión 1.0.0 hay una nueva posición llamada position_jitterdodge() que se hace para tal situación. Esta posición debe usarse dentro del geom_point() y debe haber fill= usado dentro de aes() para mostrar por qué variable esquivar sus datos. Para controlar el ancho del argumento de esquivar dodge.width= debe usarse.

 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