Le documentation pour les graphiques à barres dans ggplot2
Says (voir exemple 3):Ordre des barres empilées ggplot2 - Profil du sol
graphiques à barres sont automatiquement empilés lorsque plusieurs barres sont placées au même endroit. L'ordre du remplissage est conçu pour correspondre à la légende.
Pour une raison quelconque, la deuxième phrase ne fonctionne pas pour moi. Voici un exemple d'ensemble de données, ce qui représente des couches de sol au-dessus (feuilles mortes, etc.) et en sous-sol (sol réel):
df <- structure(list(horizon = structure(c(5L, 3L, 4L, 2L, 1L, 5L,
3L, 4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L, 5L, 3L,
4L, 2L, 1L, 5L, 3L, 4L, 2L, 1L), .Label = c("A", "B", "F", "H",
"L"), class = "factor"), site = structure(c(1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 5L,
5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L), .Label = c("A", "B", "C",
"D", "E", "F"), class = "factor"), value = c(2.75, 0.5, 0.25,
-4.125, -3.375, 3.78125, 1.375, 0.625, -10.6875, -6.34375, 4.28,
2.065, 0.68, -12.1, -10.75, 8.583333333, 4.541666667, 2.166666667,
-10.70833333, -4.25, 7.35, 4, 1.8, -13.95, -5.175, 1.933333333,
1.245833333, 0.641666667, -11.16666667, -2.291666667)), .Names = c("horizon",
"site", "value"), class = "data.frame", row.names = c(NA, -30L
))
Maintenant, j'essaie de tracer les données en spécifiant tout d'abord l'ordre des niveaux de la couche de sol (c.-à-horizons, de haut en bas sol):
require(ggplot2); require(dplyr)
df %>%
mutate(horizon = factor(horizon, levels = c("L","F","H","A","B"))) %>%
ggplot(aes(site, value)) + geom_col(aes(fill = horizon)) + labs(y = "Soil depth (cm)")
Il travaille pour L
, F
, H
mais pas pour A
, B
(ci-dessous gr ound, c'est-à-dire des valeurs négatives). La raison pour laquelle cela ne fonctionne probablement pas est que les barres empilées sont triées du plus grand au plus petit par site
(pour les valeurs positives et négatives séparément) et ensuite empilées dans une approche de haut en bas. Est-ce correct? Si c'est le cas, alors pour mes valeurs positives c'était juste une coïncidence que la légende correspondait aux barres empilées je crois. Ce que je voudrais accomplir est un empilement des barres qui correspond à l'ordre (de haut en bas) dans la légende et donc aussi le profil de sol en le regardant dans une vue en coupe transversale et je ne suis pas sûr comment pour aborder cela.
J'ai essayé de changer le comportement de tri en général, mais il produit la même parcelle que ci-dessus:
df %>%
mutate(horizon = factor(horizon, levels = c("L","F","H","A","B"))) %>%
arrange(desc(value)) %>%
ggplot(aes(site, value)) + geom_col(aes(fill=horizon)) + labs(y = "Soil depth (cm)")
df %>%
mutate(horizon = factor(horizon, levels = c("L","F","H","A","B"))) %>%
arrange(value) %>%
ggplot(aes(site, value)) + geom_col(aes(fill=horizon)) + labs(y = "Soil depth (cm)")
J'ai probablement pour trier des valeurs positives et négatives séparément, ce qui est descendant et ascendant, respectivement?
Quelle est l'attend o utput? Est-ce que votre argument 'levels' dans' factor' correspond à la sortie attendue? –
@AdamQuek Oui, les niveaux 'argument' dans le' factor' est censé correspondre à la sortie attendue. – Stefan