Inverse empilés l'ordre de la barre

Je suis de la création d'un graphique à barres empilées à l'aide de ggplot comme ceci:

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

Qui me donne quelque chose comme ceci:

Inverse empilés l'ordre de la barre

Comment puis-je inverser l'ordre barres empilées eux-mêmes, de sorte que le niveau 1 est en bas, et le niveau 5 est en haut de chaque barre?

J'ai vu un certain nombre de questions sur ce (par exemple,Comment contrôler la commande de diagramme à barres empilées à l'aide d'identité sur ggplot2) et la solution semble être de réorganiser le dataframe par que niveau que ce ggplot est à l'aide de la déterminer l'ordre

J'ai donc essayé la réorganisation de l'aide dplyr:

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

Cependant, l'intrigue s'agit de la même. Il ne semble pas faire une différence si je trier par ordre croissant ou décroissant

Voici un exemple reproductible:

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")
  • L'ordre des observations n'a pas de sens, mais l'ordre des niveaux de facteur de n'. Aussi, reprex.
  • oui, j'ai aussi essayé de changer le niveau du facteur de l'ordre avec levels(plot_df$levels) <- c("1", "2", "3", "4", "5") (et l'inverse) mais cela ne change pas le graphe d'ordre
  • Également ajouté un exemple de données
  • plot_df %>% mutate(levels = factor(levels, levels = 5:1)) %>% ggplot(aes(group, fill = levels)) + geom_bar(position = "fill") ou tout simplement ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = position_fill(reverse = TRUE))
InformationsquelleAutor Simon | 2017-03-10