2012-03-26 9 views
2

Ich möchte Boxplots für mehrere Variablen anzeigen, und rangieren sie nach Spalte Mittel in absteigender Reihenfolge, genau wie im Performance Analytics Paket. Ich verwende den folgenden Code, um die Boxplots zu generieren:Boxplots nach Mittelwert sortiert

zx <- replicate (5, rnorm(50)) 
zx_means <- (colMeans(zx, na.rm = TRUE)) 
boxplot(zx, horizontal = FALSE, outline = FALSE) 
points(zx_means, pch = 22, col = "darkgrey", lwd = 7) 

Bisher habe ich nicht in der Lage gewesen, einen Weg zu kommen, um sie zu zählen, wie oben beschrieben. Ich habe versucht, sowohl sortieren und Bestellung, aber ohne zufriedenstellende Ergebnisse bisher.

Jede Hilfe würde sehr geschätzt werden.

+0

Irgendwelche Ideen für die Verwendung von "Punkten" mit horizontalen Boxplots? Wenn ich den Boxplot auf "horizontal = TRUE" ändere, kann ich die Punkte nicht mit den Boxplots ausrichten. – kribys

+0

Wenn Sie eine neue Frage haben, stellen Sie bitte eine neue Frage und keinen Kommentar zu einer bestehenden Frage. –

+0

Entschuldigung. Ich habe meine Frage hier gestellt (http://stackoverflow.com/questions/9874512/adding-points-to-horizontal-boxplots). – kribys

Antwort

3

order funktioniert gut für mich:?

colnames (zx) <- seq_len (ncol (zx)) 
boxplot(zx [, order (zx_means)], horizontal = FALSE, outline = FALSE) 
points(zx_means [ order (zx_means)], pch = 22, col = "darkgrey", lwd = 7) 
+0

Dies ergab das Ergebnis, das ich suchte. Ich denke, ich muss die Syntax bei der Verwendung von 'Order' durcheinander gebracht haben. Danke vielmals! – kribys

+1

Wenn dies Ihr Problem gelöst hat, könnten Sie es als die richtige Antwort markieren, indem Sie das Häkchen unter dem Abstimmungszähler setzen? –

3

Mit ggplot2 dies den Job bekommt Ihr Beispiel Daten erfolgt mit:

library(ggplot2) 
library(reshape) 

zx <- replicate (5, rnorm(50)) 

# ggplot2 uses long-shaped data.frame's, not matrices 
zx_flat = melt(zx)[c(2,3)] 
names(zx_flat) = c("cat","value") 

# Here I calculate the mean per category 
zx_flat = ddply(zx_flat, .(cat), mutate, mn = mean(value)) 
zx_flat = sort_df(zx_flat, "mn") # Order according to mean 
# Here I manually set the order of the levels 
# as this is the order ggplot2 uses 
zx_flat$cat = factor(zx_flat$cat, levels = unique(zx_flat$mn)) 

# make the plot 
ggplot(aes(factor(mn), value), data = zx_flat) + geom_boxplot() 

und wir erhalten:

enter image description here

+0

Ich habe mich mit ggplot2 beschäftigt, konnte aber nicht herausfinden, wie man die Daten formatiert. Ich werde das definitiv untersuchen. Vielen Dank. – kribys