Ich möchte Datenwerte auf einem gestapelten Balkendiagramm in ggplot2 anzeigen. Hier ist mein versuchter 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")
Ich möchte diese Datenwerte in der Mitte jedes Abschnitts anzeigen. Jede Hilfe in dieser Hinsicht wird sehr geschätzt. Vielen Dank
Antworten:
Von
ggplot 2.2.0
Etiketten können leicht unter Verwendung gestapelt werdenposition = position_stack(vjust = 0.5)
ingeom_text
.Beachten Sie außerdem, dass "
position_stack()
undposition_fill()
jetzt Stapelwerte in umgekehrter Reihenfolge der Gruppierung vorliegen, wodurch die Standardstapelreihenfolge mit der Legende übereinstimmt."Antwort gültig für ältere Versionen von
ggplot
:Hier ist ein Ansatz, der die Mittelpunkte der Balken berechnet.
quelle
data.table
anstattplyr
so etwas wie:Data.dt[,list(Category, Frequency, pos=cumsum(Frequency)-0.5*Frequency), by=Year]
Wie Hadley bereits erwähnt hat, gibt es effektivere Möglichkeiten zur Kommunikation Ihrer Nachricht als Beschriftungen in gestapelten Balkendiagrammen. In der Tat sind gestapelte Diagramme nicht sehr effektiv, da die Balken (jede Kategorie) keine Achse gemeinsam haben, sodass ein Vergleich schwierig ist.
In diesen Fällen ist es fast immer besser, zwei Diagramme zu verwenden, die eine gemeinsame Achse haben. In Ihrem Beispiel gehe ich davon aus, dass Sie die Gesamtsumme und dann die Anteile anzeigen möchten, die jede Kategorie in einem bestimmten Jahr beigetragen hat.
Dadurch erhalten Sie eine 2-Panel-Anzeige wie folgt:
Wenn Sie Frequenzwerte hinzufügen möchten, ist eine Tabelle das beste Format.
quelle