Estoy creando un gráfico de barras astackdas usando ggplot de esta manera:
plot_df <- df[!is.na(df$levels), ] ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
Lo que me da algo como esto:
¿Cómo invierto el orden de las barras astackdas, para que el nivel 1 esté en la parte inferior y el nivel 5 en la parte superior de cada barra?
He visto una serie de preguntas sobre esto (por ejemplo, cómo controlar el orden del gráfico de barras astackdas utilizando identidad en ggplot2 ) y la solución común parece ser reordenar el dataframe para ese nivel, ya que lo que ggplot está usando determina el orden
Así que intenté reordenar usando dplyr:
plot_df % arrange(desc(levels))
Sin embargo, la ttwig sale igual. Tampoco parece hacer una diferencia si lo organizo por orden ascendente o descendente
Aquí hay un ejemplo reproducible:
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")
Las notas de la versión de ggplot2
versión 2.2.0 sobre barras de astackmiento sugieren :
Si quiere astackr en el orden opuesto, intente con
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")
Esta es la ttwig original :
ggplot(plot_df, aes(group, fill = levels)) + geom_bar(position = "fill")
O bien, usando position_fill(reverse = TRUE)
como lo sugirió alistair en su comentario :
ggplot(plot_df, aes(group, fill = levels)) + geom_bar(position = position_fill(reverse = TRUE))
Tenga en cuenta que los niveles (colores) en la leyenda no están en el mismo orden que en las barras astackdas.