Обратный стоп-бар

Я создаю сложную гистограмму с использованием ggplot следующим образом:

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

Что дает мне что-то вроде этого:

enter image description here

Как мне изменить порядок самих штабелированных баров, так что уровень 1 находится внизу, а уровень 5 находится в верхней части каждого столбца?

Я видел несколько вопросов по этому вопросу (например, " Как контролировать упорядочивание штабелированной гистограммы с использованием идентификатора на ggplot2"), и общее решение, похоже, заключается в изменении порядка данных на этом уровне, так как тот, который ggplot использует, определяет порядок

Поэтому я попытался переупорядочить с помощью dplyr:

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

Однако сюжет выходит так же. Также, похоже, не имеет значения, упорядочиваю ли я по возрастанию или убыванию

Вот воспроизводимый пример:

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")

Ответ 1

В примечаниях к выпуску ggplot2 версии 2.2.0 на панели Stacking предлагаются:

Если вы хотите складывать в обратном порядке, попробуйте forcats::fct_rev()

library(ggplot2)   # version 2.2.1 used    
plot_df <- data.frame(group = rep(1:4, 6),
                      levels = factor(c(rep(1:5, each = 4), rep(1, 4))))
ggplot(plot_df, aes(group, fill = forcats::fct_rev(levels))) + 
  geom_bar(position = "fill")

Обратные уровни

Это исходный сюжет:

ggplot(plot_df, aes(group, fill = levels)) + 
  geom_bar(position = "fill")

Исходный сюжет

Или, используя position_fill(reverse = TRUE), как было предложено alistaire в своем комментарии:

ggplot(plot_df, aes(group, fill = levels)) + 
  geom_bar(position = position_fill(reverse = TRUE))

введите описание изображения здесь

Обратите внимание, что уровни (цвета) в легенде не находятся в том же порядке, что и в штабелированных барах.