Je voudrais afficher les valeurs de données sur un graphique à barres empilées dans ggplot2. Voici ma tentative de code
Year <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4))
Category <- c(rep(c("A", "B", "C", "D"), times = 4))
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251)
Data <- data.frame(Year, Category, Frequency)
library(ggplot2)
p <- qplot(Year, Frequency, data = Data, geom = "bar", fill = Category, theme_set(theme_bw()))
p + geom_text(aes(label = Frequency), size = 3, hjust = 0.5, vjust = 3, position = "stack")
J'aimerais afficher ces valeurs de données au milieu de chaque partie. Toute aide à cet égard sera très appréciée. Merci
Réponses:
Les
ggplot 2.2.0
étiquettes From peuvent être facilement empilées en utilisantposition = position_stack(vjust = 0.5)
ingeom_text
.Notez également que «
position_stack()
etposition_fill()
maintenant empiler les valeurs dans l'ordre inverse du regroupement, ce qui fait que l'ordre de pile par défaut correspond à la légende».Réponse valable pour les anciennes versions de
ggplot
:Voici une approche, qui calcule les points médians des barres.
la source
data.table
au lieu deplyr
, donc quelque chose comme ceci:Data.dt[,list(Category, Frequency, pos=cumsum(Frequency)-0.5*Frequency), by=Year]
Comme hadley l'a mentionné, il existe des moyens plus efficaces de communiquer votre message que les étiquettes dans les graphiques à barres empilées. En fait, les graphiques empilés ne sont pas très efficaces car les barres (chaque catégorie) ne partagent pas un axe, la comparaison est donc difficile.
Il est presque toujours préférable d'utiliser deux graphiques dans ces instances, partageant un axe commun. Dans votre exemple, je suppose que vous souhaitez afficher le total global, puis les proportions de contribution de chaque catégorie au cours d'une année donnée.
Cela vous donnera un affichage à 2 panneaux comme celui-ci:
Si vous souhaitez ajouter des valeurs de fréquence, un tableau est le meilleur format.
la source