Изменить легенду заказа бара ggplot

Я сделал барплот в ggplot, но, чисто по эстетическим соображениям, я хочу изменить порядок категорий легенды. Вот мой сценарий:

library(ggplot2)
df <- data.frame(Month = c(4, 5, 6, 7, 8, 9, 10, 11),
                 variable = rep(c("Outlier", "NOutlier"), 4),
                 value = c(8, 9, 10, 5, 12, 13, 9, 10))

hist_overall <- ggplot(df, aes(x = Month, y = value, fill = variable)) +
  geom_bar(stat = "identity") +
  scale_fill_manual("Legenda", values = c("Outlier" = "#1260AB", "NOutlier" = "#009BFF"))
hist_overall

сюжет Я не хочу ничего делать с данными, я просто хочу изменить порядок легенды, чтобы темно-синяя категория "Outlier" отображалась поверх светло-голубой категории "NOutlier".

Кто-нибудь знает быстрый способ сделать это для меня?

1 ответ

Следующее изменение df должен делать то, что вы хотите. Мы определяем variable как фактор и определить фактор levels вручную, сортируя их по желанию.

df <- data.frame(Month = c(4, 5, 6, 7, 8, 9, 10, 11),
             variable = factor(rep(c("Outlier", "NOutlier"), 4), 
             levels=(rev(levels(factor(c("Outlier", "NOutlier")))))),
             value = c(8, 9, 10, 5, 12, 13, 9, 10))

hist_overall <- ggplot(df, aes(x = Month, y = value, fill = variable)) +
geom_bar(stat = "identity") +
scale_fill_manual("Legenda", values = c("Outlier" = "#1260AB", "NOutlier" = "#009BFF"))

Кроме того, вы можете повторно использовать ваше определение df

df <- data.frame(Month = c(4, 5, 6, 7, 8, 9, 10, 11),
         variable = rep(c("Outlier", "NOutlier"), 4),
         value = c(8, 9, 10, 5, 12, 13, 9, 10))

и определить уровни и их порядок следующим образом

levels(df$variable) <- c("Outlier", "NOutlier")

Также ознакомьтесь с этой ссылкой об изменении порядка меток легенды.

Другие вопросы по тегам