2010-08-16 15 views
5

I (Ben data.frame olarak buradan gönderdiniz) zaman serisi veri var:Barplot ggplot ile ay olarak toplam?

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") 

ayda toplam değeri gösterir ggplot bir bar grafiği olarak bu arsa için en iyi yolu (nedir metin olarak ay adıyla)?

Bir ay alanını ekleyerek elle yapabilirsiniz

: Sonra

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

bağımsız bu komplo, ancak aylar bu yaklaşımı (? Ben sıralanmış unsurunu oluşturması gerektiğini varsayalım) kullanılarak doğru sipariş değildir; Ayrıca ggplot ile "daha kolay" bir yol olduğunu düşünüyorum. Ben hiçbir şekilde duyuyorum

cevap

12

zaman serisi verileri ile bir uzman anlamına gelir, ama bu kod benim için çalıştı: my önerilerle

#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)) 

, sen bir çizgi ile sıfır vurgulayarak sona ve y eksenleri simetrik etrafında 0. Ben x ekseni minör Kılavuz çizgilerini değiştirdi, "ay" için her ay için bar aslında veri nasıl toplandığı için anlamlı değildir her yönde, birkaç hafta uzatıldı çünkü.

Düzenleme: Tabii ki, bu kodun çoğu sadece aylık toplamları oluşturmaktı. Tarih verileriniz tarih biçimindeyse, tarih ölçekleri otomatik olarak eksenler için kullanılır. majör x sonları ve bunların biçimini değiştirmek için, biçim dizeleri ne anlama ile ilgili ayrıntılar için ?strftime bakın scale_x_date()

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

ile yaparlar.