Reverse stacked bar bestellen

Ich bin erstellen Sie ein gestapeltes Säulendiagramm mit ggplot wie diese:

plot_df <- df[!is.na(df$levels), ] 
ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")

Gibt mir so etwas wie dieses:

Reverse stacked bar bestellen

Wie vertausche ich die Reihenfolge der gestapelten Balken selbst, so dass die Ebene 1 ist an der Unterseite, und level-5 ist oben in der Leiste?

Ich habe gesehen, eine Reihe von Fragen auf (z.B. Wie die Kontrolle der Bestellung von gestapelten Säulendiagramm mit Identität auf ggplot2) und die Allgemeine Lösung scheint es zu sein, die Reihenfolge der dataframe durch, dass die Ebene, dass das, was ggplot ist mit dem bestimmen der Reihenfolge

Also habe ich versucht, die Neuordnung mit dplyr:

plot_df <- df[!is.na(df$levels), ] %>% arrange(desc(levels))

Aber der plot kommt dasselbe raus. Es scheint auch nicht zu einen Unterschied machen, ob ich ordne nach aufsteigender oder absteigender Reihenfolge

Hier ist eine reproduzierbare Beispiel:

group <- c(1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4)
levels <- c("1","1","1","1","2","2","2","2","3","3","3","3","4","4","4","4","5","5","5","5","1","1","1","1")
plot_df <- data.frame(group, levels)

ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
Die Reihenfolge der Beobachtungen keinen Sinn macht, aber die Reihenfolge der faktorstufen tut. Auch, reprex.
ja, ich habe auch versucht, die änderung der Faktor Ebene, um mit levels(plot_df$levels) <- c("1", "2", "3", "4", "5") (und die umgekehrte Reihenfolge), aber es ändert nichts an der Grafik, um
Auch Hinzugefügt ein Beispiel der Daten
plot_df %>% mutate(levels = factor(levels, levels = 5:1)) %>% ggplot(aes(group, fill = levels)) + geom_bar(position = "fill") oder nur ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = position_fill(reverse = TRUE))

InformationsquelleAutor Simon | 2017-03-10

Schreibe einen Kommentar