ggplot2: Modification de l'ordre des piles sur un graphique à barres
j'essaie de faire un graphe à barres empilées avec un facet_wrap, mais je veux que l'ordre de mes variables empilées ("développées") soit inversé. J'ai réorganisé les facteurs, et essayé "order=descendre()," ainsi que "scale_fill_manual" et rien ne semble fonctionner.
Voici mon code:
developed=rep(c("developed","available"),6)
agriculture=rep(c(rep("loi",2), rep("dryland",2), rep("agroforestry",2)),2)
acres=c(7435,24254,10609,120500,10651,75606,6037,9910,4390,895,9747,46893)
islands=c(rep("All islands",6), rep("Oahu",6))
all_is2=data.frame(developed, agriculture, acres, islands)
head(all_is2)
developed agriculture acres island
1 developed loi 7435 All islands
2 available loi 24254 All islands
3 developed dryland 10609 All islands
4 available dryland 120500 All islands
5 developed agroforestry 10651 All islands
6 available agroforestry 75606 All islands
modification des niveaux de facteur "agriculture" et "développé"
all_is2$agriculture=factor(all_is2$agriculture,levels=c("loi","dryland","agroforestry"))
all_is2$developed=factor(all_is2$developed,levels=c("developed","available"))
levels(all_is2$developed)
[1] "developed" "available"
alors, traçage:
ggplot(all_is2,aes(x=agriculture,y=acres,fill=developed))+
geom_bar(position="stack", stat="identity")+
facet_wrap(~islands)+ scale_fill_grey(start=0.8, end=0.2, name="")+ xlab("")+ylab("Acres")+theme_bw()+ scale_y_continuous(labels=comma)
je veux les parties" développées "des barres en gris sur les parties" disponibles " des barres, qui sont noires. Et la légende devrait correspondre à l'ordre des barreaux aussi.
en outre, est-il possible de déplacer la facet_wrap "All islands" et "Oahu" du haut vers le bas du graphique sous "loi" "dryland" et "agroforesterie."Je vous remercie pour votre aide!!
2 réponses
Ce pourrait être une solution.
ce que j'ai fait était de commander l'ensemble de données, de sorte que la valeur que je voulais apparaître la plus proche de l'axe des x apparaissait en premier dans l'ensemble de données. (J'ai utilisé votre ordre de facteurs ici). Cette fixt le positionnement des barres.
Ensuite, nous avons dû changer les couleurs et l'ordre de la légende. Je n'ai pas pu enrouler ma tête autour de scale_fill_grey, donc je l'ai changé en scale_fill_manual à la place, briser.
ggplot(all_is2[rev(order(all_is2$developed)),] ,aes(x=agriculture,y=acres,fill=developed))+
geom_bar(position="stack", stat="identity")+theme_bw()+
facet_wrap(~islands)+
scale_fill_manual(values=c(developed="grey80",available="grey20"),name="",
breaks=c("developed","available"))+
xlab("")+ylab("Acres")
Je ne sais pas si c'est un bug ou une fonctionnalité, et je pense que cela s'est aussi produit avec les versions précédentes de ggplot, mais il semble qu'avec stat_identity la première observation soit tracée la plus proche de l'axe des x, la seconde au-dessus de cela etc.
Démonstration:
set.seed(123)
testdat <- data.frame(x=1,y=sample(5))
p1 <- ggplot(testdat, aes(x=x,y=y,fill=factor(y))) +geom_bar(stat="identity")+labs(title="order in dataset")
p2 <- ggplot(testdat[order(testdat$y),],aes(x=x,y=y,fill=factor(y))) +
geom_bar(stat="identity") + labs(title="ordered by y")
p3 <- ggplot(testdat[rev(order(testdat$y)),],aes(x=x,y=y,fill=factor(y))) +
geom_bar(stat="identity") + labs(title="reverse ordered by y")
Fwiw, voici une solution avec dplyr
et scale_fill_manual
pour être explicite sur les couleurs:
library(ggplot2)
library(dplyr)
developed=rep(c("developed","available"),6)
agriculture=rep(c(rep("loi",2), rep("dryland",2), rep("agroforestry",2)),2)
acres=c(7435,24254,10609,120500,10651,75606,6037,9910,4390,895,9747,46893)
islands=c(rep("All islands",6), rep("Oahu",6))
all_is2=data.frame(developed, agriculture, acres, islands)
all_is2$agriculture=factor(all_is2$agriculture,levels=c("loi","dryland","agroforestry"))
#all_is2$developed=factor(all_is2$developed,levels=c("available","developed"))
all_is3 <- all_is2 %>% group_by(islands,agriculture,developed) %>%
summarize(acres=sum(acres))
ggplot(all_is3,aes(x=agriculture,y=acres,fill=developed))+
geom_bar(position="stack", stat="identity")+
facet_wrap(~islands)+
xlab("")+ylab("Acres")+theme_bw() +
scale_fill_manual(name="",values=c("available"="black","developed"="light gray"))