2009-09-27 8 views
6

Angenommen, Sie haben das folgende Daten-Set:Hinzufügen von Auswertungsstatistiken (oder auch Rohdaten Punkte) ausgewichen Position Boxplots

trt <- ifelse(runif(100)<0.5,"drug","placebo") 
inj.site <- ifelse(runif(100)<0.5,"ankle","wrist") 
relief <- 20 + 0.5*(inj.site=="ankle") + 0.5*(trt=="drug") + rnorm(100) 
to.analyze <- data.frame(trt,inj.site,relief) 

Nun ist die Idee ist es, eine boxplot mit Verletzungsstelle auf der x-Achse und Boxen zu machen durch Behandlung Seite-an-Seite:

bplot <- ggplot(to.analyze,aes(inj.site,relief,fill=trt)) + geom_boxplot(position="dodge") 

Einfach genug. Aber jetzt möchte ich rohe Datenpunkte oben auf den Boxen hinzufügen. Wenn ich nicht Boxen mit position="dodge" hätte, wäre dies einfach:

bplot + geom_point(aes(colour=trt)) 

Doch dieser zieht Punkte zwischen den Boxen, und dem Hinzufügen von einem position="dodge" diese Geometrie nicht zu funktionieren scheint. Wie stelle ich das so ein, dass Punkte über die Boxen gezogen werden?

Bonus: gleiche Situation mit stat_summary(blah,y.fun=mean,shape="+") zu überplot die Mittel, die das gleiche Problem hat.

+0

Relief <- 20 + 0,5 * (inj.site == Knöchel) + 0,5 * (trt == "Droge") + rnorm (100) sollte sein: Erleichterung <- 20 + 0,5 * (inj.site == "Knöchel") + 0,5 * (trt == "Medikament") + rnorm (100) – Paolo

+0

äh, ja, behoben. –

Antwort

3

Hadley wird mich zweifellos korrigieren, wenn ich hier falsch bin ...

Hier ist die natürliche Syntax:

bplot + geom_point(aes(colour=trt), position=position_dodge(width=.5)) 

(position = "ausweichen" wird das gleiche tun, ohne den Parameter.)

Wenn ich es plotte, bekomme ich etwas, das aussieht wie ein position_jitter(), was vermutlich auch das ist, was du bekommst.

Neugierig ging ich in die Quelle zu suchen, wo ich die Funktion pos_dodge() fand. (Typ pos_dodge an einer R prompt es zu sehen ...) Hier ist das Ende davon:

within(df, { 
    xmin <- xmin + width/n * (seq_len(n) - 1) - diff * (n - 1)/(2 * n) 
    xmax <- xmin + d_width/n 
    x <- (xmin + xmax)/2 
}) 

n die Anzahl der Zeilen des Datenrahmens. Es sieht also so aus, als würde es den einzelnen Punkten um einen Bruch ausweichen, der von der Reihe indiziert wird! Also wird der erste Punkt Breite/n ausgewichen, der zweite Punkt Breite 2 * Breite/n und der letzte Punkt Breite * n ausgewichen.

Dies ist offensichtlich nicht das, was Sie bedeutet, obwohl es ist, was Sie sagte. Vielleicht stecken Sie den ausgeklappten Boxplot manuell fest oder verwenden eine andere Visualisierung, wie zB Facetting?

ggplot(to.analyze,aes(inj.site,relief)) + geom_boxplot() + facet_wrap(~ trt) 
+0

In Facettierung funktioniert es perfekt. Aus Gründen der Visualisierung wäre ich jedoch viel eher der Position ausgewichen, obwohl ich versuchen könnte, auf jun.site zu treten. –

Verwandte Themen