Ich versuche, eine divergierende gestapelte Bar wie here zu erstellen, und habe ein ähnliches Problem zu dieser SO question. Meine Herangehensweise ist jedoch etwas anders, da ich alles über einen einzigen Datensatz statt über zwei verwalte und meine Farben unabhängig von meinen Daten sind.ggplot seltsame Reihenfolge der gestapelten Bar
Reprex wie folgt:
library(tidyverse)
library(RColorBrewer)
x <- tribble(
~response, ~count,
0, -27,
1, -9,
2, -41,
3, -43,
4, -58,
5, -120,
5, 120,
6, 233,
7, 379,
8, 388,
9, 145,
10, 61
) %>%
mutate(response = factor(response))
ggplot(x, aes(x = 1, y = count, fill = response)) +
geom_col() +
scale_fill_brewer(palette = "RdBu") +
coord_flip()
Das gibt mir ein Bild wie folgt aus:
Das Problem ist mit der Bestellung der gestapelten Daten auf der rechten Seite des Null zu tun, wo sie Stapeln scheint in absteigender Reihenfolge zu sein. Irgendwelche Gedanken darüber, wie dieses Problem beheben würde sehr geschätzt werden (erwartete Bestellung 0-10 wäre, nicht 0-5,10-5)
Es ist ein kniffliger, denn letztlich sollte das ähnlich einer Likert-Skala sein, die 0:10, von links nach rechts, anordnet. Der Grund dafür, dass es 2 Datensätze für 5 gibt, liegt darin, dass ich die Hälfte auf beiden Seiten des "Mittelpunkts" des Diagramms haben möchte. Diese Bestellung entspricht nicht ganz dem Zweck. – Dan
Ah ja, es ist, bemerkte nachher die Reihenfolge ist umgekehrt (relativ zur Legende). Außerdem stellen die Werte die geordneten Werte dar (nicht die tatsächlichen Zählungen), was dies zu einer suboptimalen Antwort macht :) Alternativ können Sie die Variablen nach Anzahl sortieren, eine manuelle Skala einschließlich 'RColorBrewer :: brewer.pal (11," RdBu ") erstellen '(Wiederholen Sie 5) und fügen Sie es Ihrem df. Dies kann als Eingabe für 'scale_fill_manual' verwendet werden. – timfaber