2017-02-08 18 views
2

Ich mag würde diese Daten mit ggplot plotten:ggplot facet_wrap mit spezifischer Reihenfolge der Variablen in jeder Facette

pl <- ggplot(df, aes(var2, value)) 
pl <- pl + geom_col() 
pl <- pl + facet_wrap(~ var1, scales = "free") 
pl 

Die Reihenfolge des var2 auf:

library(ggplot2) 
set.seed(0) 
df <- data.frame(
    var1 = rep(c("group1", "group2"), each = 3), 
    var2 = rep(letters[1:3], 2), 
    value = runif(6, 0, 10) 
) 

Die Handlung sollte so facettiert werden Die X-Achse sollte durch Erhöhen der Reihenfolge von value bestimmt werden. Ich konnte diese Weise erreichen:

df$temp_var <- paste(df$var1, df$var2) 
pl <- ggplot(df, aes(reorder(temp_var, value), value)) 
pl <- pl + geom_col() 
pl <- pl + facet_wrap(~ var1, scales = "free") 
pl 

jedoch X-Achsenbeschriftungen a werden soll, b und c. Normalerweise würde ich var2 in einen Faktor mit den Faktorstufen umwandeln, die die gewünschte Reihenfolge haben, aber in diesem Fall ist dies wahrscheinlich nicht möglich. Hat jemand Ideen, wie das gemacht werden kann? :)

Antwort

6

einfach die Achsenbeschriftungen setzen den tatsächlichen bricht mit einem benannten Zeichen Vektor, anders zu sein als:

pl + scale_x_discrete(labels = setNames(as.character(df$var2), df$temp_var)) 

enter image description here

+1

Nizza, danke! Meine reellen Daten haben viele verschiedene Gruppen in 'var1' mit unterschiedlichen Zeichenlängen, so dass ich diese stattdessen benutzte:' scale_x_discrete (labels = setNames (as.character (df $ var2), df $ temp_var)) ' –

+0

@JonSnow Ja, das ist die allgemeinere Lösung nehme ich an, habe die Antwort bearbeitet. – Axeman

Verwandte Themen