2010-08-16 14 views
5

मैं समय श्रृंखला डेटा है (मैं इसे यहाँ एक data.frame के रूप में पोस्ट किया है):gplplot के साथ महीने में बारप्लॉट योग?

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

ggplot में एक बार साजिश है कि प्रति माह कुल मूल्य को दिखाने के रूप में इस साजिश का सबसे अच्छा तरीका (यह क्या है महीने के नाम के साथ पाठ के रूप में)?

मैं एक महीने के क्षेत्र जोड़कर मैन्युअल रूप से कर सकते हैं: फिर

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

इस स्वतंत्र रूप से की साजिश रचने, लेकिन महीनों सही ढंग से इस दृष्टिकोण (? लगता है मैं एक आदेश दिया कारक भी बनाना होगा) का उपयोग कर आदेश दिया नहीं कर रहे हैं; मैं यह भी मान रहा हूं कि ggplot के साथ एक "आसान" तरीका है।

उत्तर

12

मैं किसी भी तरह से कर रहा हूँ समय श्रृंखला डेटा के साथ एक विशेषज्ञ का मतलब है, लेकिन इस कोड मेरे लिए काम किया:

#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)) 
मेरे सुझाव के साथ

, आप एक लाइन के साथ शून्य पर प्रकाश डाला अंत, और y अक्षों सममित हैं लगभग 0। मैंने x-axis मामूली ग्रिडलाइन को "महीने" में बदल दिया, क्योंकि प्रत्येक महीने के लिए बार प्रत्येक दिशा में कुछ हफ्तों तक बढ़ाया जाता है, जो डेटा को एकत्रित करने के लिए वास्तव में सार्थक नहीं है।

संपादित करें: बेशक, इस कोड का अधिकांश मासिक रकम बनाने के लिए था। यदि आपका दिनांक डेटा डेट प्रारूप में है, तो दिनांक स्केल स्वचालित रूप से अक्षों के लिए उपयोग किए जाते हैं। प्रमुख x टूट जाता है और उनके प्रारूप ऊपर बदलने के लिए आपको प्रारूप तार क्या मतलब है पर जानकारी के लिए ?strftime देखें scale_x_date()

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

साथ ऐसा करते हैं।

संबंधित मुद्दे