web-dev-qa-db-fra.com

ggplot2 - gigue et position esquive ensemble

J'essaie de recréer une figure à partir d'un séminaire GGplot2 http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf .

Dans ce cas, j'essaie de générer l'exemple 5, avec des points de données instables soumis à une esquive. Lorsque j'exécute le code, les points sont centrés autour de la ligne correcte, mais n'ont pas de gigue.

Voici le code directement de la présentation.

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
30
user1381239

EDIT : Il y a une meilleure solution avec ggplot2 version 1.0.0 utilisant position_jitterdodge. Voir la réponse de @Didzis Elferts. Notez que dodge.width contrôle la largeur de l'esquive et jitter.width contrôle la largeur de la gigue.

Je ne sais pas comment le code a produit le graphique dans le pdf.

Mais est-ce que quelque chose comme ça vous rapproche de ce que vous recherchez?

Je convertis tailindex et memorypar en numérique; ajoutez-les ensemble; et le résultat est la coordonnée x pour le geom_jitter couche. Il existe probablement un moyen plus efficace de le faire. J'aimerais aussi voir comment esquiver geom_boxplot et geom_jitter, et sans tremblement, produira le graphique dans le 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

33
Sandy Muspratt

Dans la version ggplot21.0.0 Il y a une nouvelle position nommée position_jitterdodge() qui est faite pour une telle situation. Cette position doit être utilisée à l'intérieur de la geom_point() et il devrait y avoir fill= À l'intérieur de la aes() pour montrer par quelle variable esquiver vos données. Pour contrôler la largeur de l'argument esquivant, dodge.width= Doit être utilisé.

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

56
Didzis Elferts