Empilement un mélange de valeurs négatives et positives est difficile pour ggplot2. Le plus simple est de diviser le jeu de données en deux, un pour les positifs et un pour les négatifs, puis d'ajouter des couches de barres séparément. Un exemple classique est here.
Vous pouvez faire la même chose avec le texte, en ajoutant un calque de texte pour les valeurs y positives et un pour les négatifs.
dat1 = subset(dat, value >= 0)
dat2 = subset(dat, value < 0)
ggplot(mapping = aes(x = group, y = value, fill = factor(day))) +
geom_bar(data = dat1, stat = "identity", position = "stack")+
geom_bar(data = dat2, stat = "identity", position = "stack") +
geom_text(data = dat1, aes(label = round(value,0)), color = "black", position = "stack") +
geom_text(data = dat2, aes(label = round(value,0)), color = "black", position = "stack")
Si vous utilisez la version actuellement semble développement de ggplot2 (2.1.0.9000), l'empilement ne pas fonctionner correctement dans geom_text
pour les valeurs négatives. Vous pouvez toujours calculer les positions de texte "à la main" si nécessaire.
library(dplyr)
dat2 = dat2 %>%
group_by(group) %>%
mutate(pos = cumsum(value))
ggplot(mapping = aes(x = group, y = value, fill = factor(day))) +
geom_bar(data = dat1, stat = "identity", position = "stack")+
geom_bar(data = dat2, stat = "identity", position = "stack") +
geom_text(data = dat1, aes(label = round(value,0)), color = "black") +
geom_text(data = dat2, aes(label = round(value,0), y = pos), color = "black")
Vous devriez faire attention à l'avertissement: 'message d'avertissement: Empilement pas bien défini quand ymin = 0' dire que vous faites un graphique confus!. – alistaire
Pourquoi utilisez-vous 'position =" identity "' dans 'geom_bar' si vous voulez que les barres soient empilées? – Axeman
Egalement @alistaire, je ne reçois pas cet avertissement, en cours d'exécution '2.1.0.9000'. – Axeman