2010-08-16 7 views
5

Ich habe Zeitreihendaten (ich habe es hier gepostet als data.frame):Barplot Summen nach Monat mit ggplot?

x <- structure(list(date = structure(c(1264572000, 1266202800, 1277362800, 
1277456400, 1277859600, 1278032400, 1260370800, 1260892800, 1262624400, 
1262707200), class = c("POSIXt", "POSIXct"), tzone = ""), data = c(-0.00183760994446658, 
0.00089738603087497, 0.000423513598318936, 0, -0.00216496690393131, 
-0.00434836817931339, -0.0224199153445617, 0.000583823085470003, 
0.000353088613905206, 0.000470295331234771)), .Names = c("date", 
"data"), row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10" 
), class = "data.frame") 

Was ist der beste Weg, dies als Balkendiagramm in ggplot plotten, die den Gesamtwert pro Monat zeigen würde (mit dem Monatsnamen als Text)?

ich dies manuell durch Hinzufügen eines Monatsfeld tun:

x$month <- format(x$date, format="%B") 
ddply(x, .(month), function(x) sum(x[, "data"])) 

Dann ist diese unabhängig Plotten, aber die Monate nicht richtig mit diesem Ansatz bestellt (? Nehme an, dass ich eine geordnete Faktor zu schaffen); Ich nehme auch an, dass es einen "einfacheren" Weg mit ggplot gibt.

Antwort

12

ich nicht bin, bedeutet einen Experten mit Zeitreihendaten, aber dieser Code für mich gearbeitet:

#The binning by month, saving as a date 
x$month <- as.Date(cut(x$date, breaks = "month")) 

#Plotting 
p <- ggplot(x, aes(month, data))+ 
    stat_summary(fun.y = sum, geom = "bar") 

#My suggestions for display 
minmax <- max(abs(x$data)) 

p + geom_hline(y = 0)+ 
    scale_x_date(minor = "month")+ 
    ylim(-minmax, minmax) 
    # or more ggplot2 accurately 
    #+coord_cartesian(ylim = c(-minmax, minmax)) 

Mit meinen Vorschlägen, Sie am Ende Hervorhebung Null mit einer Linie, und die y-Achsen sind symmetrisch um 0. Ich änderte die kleinen Gitterlinien der x-Achse in "Monat", weil die Balken für jeden Monat einige Wochen in jeder Richtung verlängert wurden, was für die Art der Datenaggregation eigentlich nicht aussagekräftig ist.

Bearbeiten: Natürlich war der Großteil dieses Codes nur die monatlichen Summen zu erstellen. Wenn Ihre Datumsdaten in einem Datumsformat vorliegen, werden die Datumsmaßstäbe automatisch für die Achsen verwendet. Um die großen x Pausen zu ändern und ihr Format, tun Sie dies mit scale_x_date()

p + scale_x_date(major = "month", format = "%b") 
#or 
p + scale_x_date(major = "month", format = "%B %Y") 

Siehe ?strftime für Details was die Formatstrings bedeuten.