J'utilise un diagramme à barres superposées pour afficher la dominance relative des espèces.Comment modifier un graphique à barres empilées recto-verso
Le barchart est généré avec le code suivant:
RelDom <- RelDom[order(RelDom[,2]),] # rank by column A
RelDom
RelDom %>%
gather(LU, RD, -species) -> likert
likert
likert %>%
filter(LU=="A") %>%
arrange(RD) %>% .$species -> ind_order
ind_order
likert %>%
mutate(species=factor(species, levels=ind_order, ordered=TRUE)) %>%
mutate(LU=factor(LU,
levels=c("A", "C", "B"), ordered=F,
labels=c("A", "C", "B"))) -> lik
lik
tiff(file = "RD.tiff", height=10, width=20, units="in", res=300, compression="lzw")
ggplot() +
geom_hline(yintercept=0, lwd=1) +
geom_bar(data=lik, width=.75,
stat="identity", position="stack",
aes(x=species, y=RD, fill=LU)) +
annotate("text", x = 2, y=-50, label = "Old", size=8) +
annotate("text", x = 2, y=70, label = "New", size=8) +
scale_x_discrete(limits = rev(levels(lik$species)),expand=c(0,0)) +
scale_fill_manual(values=c("darkgreen", "red","blue"),
drop=FALSE) +
scale_y_continuous(expand=c(0,0),
limits=c(-100, 200),
breaks=c(-100,-50,0,50,100),
labels=c("100","50","0","50","100")) +
coord_flip() +
xlab("Species") +
ylab("Relative Dominance") +
theme_bw() +
theme(legend.position = c(0.9, 0.1)) +
theme(legend.title = element_blank()) +
theme(legend.text = element_text(colour="black", size = 14)) +
theme(legend.background = element_rect(fill="white", size=0.5, linetype="solid", colour ="black")) +
theme(axis.title.x = element_text(vjust=0.5,face="bold", size=16),
axis.text.x = element_text(vjust=4, size=14)) +
theme(axis.title.y = element_text(angle=90, vjust=0.70, face="bold", size=18),
axis.text.y = element_text(size=14)) +
theme(panel.grid.minor=element_blank()) +
theme(panel.grid.major.y = element_blank()) +
theme(panel.grid=element_blank()) +
theme(panel.border = element_rect(size=1, color = "black")) +
theme(plot.margin = unit(c(0.2,0.9,0.3,0.2),"lines"))
dev.off()
La figure se présente comme suit:
Maintenant, au lieu du bleu et rouge étant empilés horizontalement, je voudrais chaque colonne bleue doit être directement au-dessus d'une colonne rouge respective. Cela devrait être fait de sorte que les deux colonnes bleues et rouges ne soient que la moitié de leur largeur actuelle, de sorte que, combinées, elles correspondent à la largeur de la colonne verte.
De plus, j'ai du mal à faire afficher la légende dans l'ordre vert, bleu et rouge.
Merci d'avance pour tout conseil.
Ce sont les données reproductibles: dput (RelDom):
structure(list(species = structure(c(1L, 8L, 9L, 10L, 11L, 12L,
13L, 14L, 15L, 2L, 3L, 4L, 5L, 6L, 7L), .Label = c("Sp1", "Sp10",
"Sp11", "Sp12", "Sp13", "Sp14", "Sp15", "Sp2", "Sp3", "Sp4",
"Sp5", "Sp6", "Sp7", "Sp8", "Sp9"), class = "factor"), A = c(-73.55,
-72.42, -35.62, -12.45, -8.89, -7.26, -6.6, -6.42, -6.02, -5.26,
-4.59, -4.31, -3.53, -3.25, -2), B = c(64.54, 88.06, 39.57, 14.64,
6.6, 10.55, 3.87, 7.35, 5.09, 1.88, 6.84, 10.34, 2.17, 2.36,
1.36), C = c(47.35, 78.55, 39.35, 21.96, 6.25, 7.64, 3.28, 8.94,
3, 6.04, 5.16, 3.63, 5.42, 12.34, 5.03)), .Names = c("species",
"A", "B", "C"), row.names = c(NA, 15L), class = "data.frame")
Très bien, merci, c'est exactement ce que j'espérais. En ce qui concerne la légende, si je change l'ordre dans la fonction 'mutate()' ou dans la ligne 'color_fill_manual', les données et les couleurs respectives deviennent confuses. Serait-ce parce que R classe alphabétiquement les étiquettes de colonnes par défaut (je dirais que mes en-têtes de colonnes sont A = OG, B = LIL, C = HIL, j'ai utilisé A, B, C pour le rendre plus facile, mais bien sûr cela supprime la question de l'ordre alphabétique potentiel). – tabtimm
Heureux que c'était utile. Avez-vous essayé: '... scale_fill_manual (valeurs = c (" OG "=" darkgreen "," HIL "=" bleu "," LIL "=" rouge "))' – missuse
Merci, cela fonctionne. Cependant, alors que j'obtiens la bonne combinaison, c'est-à-dire HIL = bleu et LIL = rouge, l'ordre est OG, HIL, LIL plutôt que OG, LIL, HIL qui me ramène au problème que lorsque je change l'ordre des niveaux dans le mute(), c'est-à-dire niveaux = c ("OG", "LIL", "HIL"), les couleurs et les données sous-jacentes ne correspondent plus (alors que l'ordre des légendes est correct). Je me demande si je pourrais changer quelque chose dans le fichier .csv original, à savoir utiliser A, B, C au lieu de OG, LIL, HIL, puis renommer OG, LIL, HIL dans R, pour éviter le problème de l'ordre alphabétique? – tabtimm