2016-08-08 53 views
4

ich diesen Code verwendet, um die folgenden gestapeltes Balkendiagramm zu machen:Zeige gesamt (Summe) Werte jeder Gruppe auf der Oberseite des gestapeltes Balkendiagramm in ggplot2

library(ggplot2) 
library(dplyr) 

Year  <- c(rep(c("2006", "2007", "2008", "2009"), 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) 

Data2 <-Data%>% 
    group_by(Year, Category)%>% 
    summarise(Sum_grp = sum(Frequency)) 

Data3 <-transform(Data2, Pos = ave(Frequency, Year, FUN = cumsum) - Frequency/2) 

ggplot(Data3, aes(Year, Frequency, group=Category,fill = Category))+ 
    geom_bar(stat="identity")+ 
    geom_text(aes(label = Frequency,y=Pos), size = 3) 

enter image description here

Nun würde Ich mag an addiere die Summe jeder Gruppe oben auf jeder Leiste, aber ich habe keine Ahnung wie.

Könnte mir bitte jemand helfen?

Vielen Dank !!!!!

Antwort

8

Wenn Sie die Erstellung eines dritten zusammenfassenden Datensatzes vermeiden möchten, können Sie stat_summary verwenden.

ggplot(Data3, aes(Year, Frequency, group = Category, fill = Category))+ 
    geom_bar(stat="identity")+ 
    geom_text(aes(label = Frequency,y=Pos), size = 3) + 
    stat_summary(fun.y = sum, aes(label = ..y.., group = Year), geom = "text") 

enter image description here

Verwenden vjust, um die Etiketten nach oben mehr, wenn nötig. Ich fand vjust = -.2 schien ziemlich gut auszusehen.