I create a complex histogram using ggplot as follows:
plot_df <- df[!is.na(df$levels), ] ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
Which gives me something like this:

How can I change the order of the stacked bars themselves, so that level 1 is at the bottom and level 5 is at the top of each column?
I saw several questions on this issue (for example, “ How to control the ordering of a stacked histogram using an identifier on ggplot2” ), and the general solution seems to be to reorder the data at this level, since the one that ggplot uses determines the order
So I tried reordering with dplyr:
plot_df <- df[!is.na(df$levels), ] %>% arrange(desc(levels))
However, the plot goes the same way. It also doesn't seem to matter if I sort in ascending or descending order.
Here is a reproducible example:
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")