2012-05-08 17 views
19

Ich versuche, eine Figur aus einem GGplot2 Seminar http://dl.dropbox.com/u/42707925/ggplot2/ggplot2slides.pdf zu erstellen.ggplot2 - Jitter und Position ausweichen zusammen

In diesem Fall versuche ich, Beispiel 5 zu generieren, mit jittered Datenpunkte, die einem Ausweichen unterliegen. Wenn ich den Code ausführe, sind die Punkte um die richtige Linie zentriert, aber haben keinen Jitter.

Hier ist der Code direkt aus der 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 
+1

Da Didzis Elferts eine bessere Antwort mit 'position_jitterdodge' in ggplot2 Version 1.0.0 zur Verfügung gestellt hat, sollten Sie un-akzeptieren meine Antwort und nehmen die von Didzis Elferts vorgesehen Antwort. –

Antwort

27

EDIT: Es gibt eine bessere Lösung mit ggplot2 Version 1.0.0 mit position_jitterdodge. Siehe @Didzis Elferts Antwort. Beachten Sie, dass dodge.width die Breite des Ausweichens steuert und jitter.width die Breite des Jitters steuert.

Ich bin mir nicht sicher, wie der Code das Diagramm in der PDF erzeugte.

Aber bringt dich etwas in die Nähe dessen, wonach du suchst?

Ich konvertiere tailindex und memorypar zu numerisch; addiere sie zusammen; und das Ergebnis ist die x-Koordinate für die Schicht geom_jitter. Es gibt wahrscheinlich einen effektiveren Weg, es zu tun. Außerdem würde ich gerne sehen, wie das Ausweichen geom_boxplot und geom_jitter, und ohne zu jittern, wird das Diagramm in der pdf erzeugen.

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

Danke, ich wünschte, es gäbe einen eleganten Weg innerhalb von ggplot2, aber mit dieser Problemumgehung wird alles erledigt. Danke noch einmal! – user1381239

40

In ggplot2 Version 1.0.0 es neue Position ist position_jitterdodge() benannt, die für eine solche Situation gemacht wird. Diese Position sollte innerhalb der geom_point() verwendet werden und es sollte fill= innerhalb der aes() verwendet werden, um zu zeigen, durch welche Variable Ihre Daten auszuweichen. Um die Breite des Ausweichen Arguments zu steuern, sollte dodge.width= verwendet werden.

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

Vielen Dank für diesen Beitrag. das ist sehr hilfreich. Ich schreibe gerade meinen eigenen Code, der gut funktioniert. Aber ich bekomme irgendwie schwarze Farbe für Ausreißer. Können Sie raten, was mögliche Ursachen sein könnten? – jazzurro

+1

Schwarze Farbe ist die Standardfarbe für Ausreißer. In diesem Code für 'geom_boxplot()' 'outlier.colour =' wird auf 'NA' gesetzt, um sie nicht anzuzeigen. –

+1

Hallo, ich habe gerade die Lösung gefunden. "Ausreißerfarbe" muss Farbe geschrieben werden, nicht Farbe. Es scheint, dass der amerikanische Zauber hier nicht bevorzugt wird. Danke für deine Antwort. :-) – jazzurro

Verwandte Themen