Я знаю, что об этом спрашивали много раз, что заставляет меня чувствовать себя немного лучше, почему я запутался. Я пытаюсь сохранить порядок цветов в соответствии с переменной, выбранной для черчения, и в легенде.
Я посмотрел здесь и здесь на то, что, как я надеялся, решит мою проблему, но это была либо другая проблема, либо я неправильно понял, либо я ошибаюсь, что я не вижу
Я указал порядок факторной переменной Group, но цвета меняются в алфавитном порядке, в отличие от факторного порядка . Так как я указываю Группу как фактор и указываю порядок уровней («B» всегда сначала как «group_1»), я бы подумал, что цвет был бы неизменным для «B», но он меняется.
Если бы кто-то мог сообщить мне, что мне не хватает, я был бы очень признателен!
Воспроизводимый пример
library(tidyverse)
# Sample data
Group <- c("A", "B", "C")
Value <- c(3, 3, 5)
# Create data frame
mydata <- data.frame(Group, Value)
# Create variable for group selected for plotting
group_1 <- "B"
group_2 <- "A"
# Make a pyramid plot, making one group negative numbers for bar chart
pyramid <- mydata %>%
filter(Group == group_1 | Group == group_2) %>%
mutate(Value = ifelse(Group == group_2, Value * -1, Value)) %>%
# Thought this would keep color ordering consistent
mutate(Group = factor(Group, levels = c(group_1, group_2)))
pyramid_plot <- ggplot(pyramid, aes(x = Group,
y = Value,
fill = Group)
) +
geom_bar(data = subset(pyramid, Group == group_1),
stat = "identity"
) +
geom_bar(data = subset(pyramid, Group == group_2),
stat = "identity"
) +
coord_flip() +
scale_fill_manual(name = "Group",
values = c("#1f78b4", "#33a02c"), # blue, green
breaks = c(group_1, group_2),
labels = c(group_1, group_2)
)
pyramid_plot
# Now do another plot, keeping group_1 the same but changing group_2
group_1 <- "B"
group_2 <- "C"
pyramid <- mydata %>%
filter(Group == group_1 | Group == group_2) %>%
mutate(Value = ifelse(Group == group_2, Value * -1, Value)) %>%
# Thought this would keep color ordering consistent
mutate(Group = factor(Group, levels = c(group_1, group_2)))
pyramid_plot2 <- ggplot(pyramid, aes(x = Group,
y = Value,
fill = Group)
) +
geom_bar(data = subset(pyramid, Group == group_1),
stat = "identity"
) +
geom_bar(data = subset(pyramid, Group == group_2),
stat = "identity"
) +
coord_flip() +
scale_fill_manual(name = "Group",
values = c("#1f78b4", "#33a02c"), # blue, green
breaks = c(group_1, group_2),
labels = c(group_1, group_2)
)
pyramid_plot2