Barplot按月与ggplot合计?

gri*_*fin 5 r time-series ggplot2

我有时间序列数据(我在这里将其作为data.frame发布):

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")
Run Code Online (Sandbox Code Playgroud)

将这个绘制为ggplot中的条形图的最佳方法是什么,它将显示每月的总价值(月份名称为文本)?

我可以通过添加月份字段手动执行此操作:

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

然后独立绘制这个,但是使用这种方法没有正确地订购月份(假设我需要创建一个有序因子?); 我也假设ggplot有一种"更简单"的方式.

JoF*_*wld 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))
Run Code Online (Sandbox Code Playgroud)

根据我的建议,你最终用一条线突出显示零,并且y轴在0左右对称.我将x轴次网格线改为"月",因为每个月的条形在每个方向延伸了几周,这对于如何聚合数据实际上没有意义.

编辑: 当然,大部分代码只是为了创建月度总和.如果日期数据采用日期格式,则日期刻度将自动用于轴.要更改主要的x中断及其格式,请执行此操作scale_x_date()

p + scale_x_date(major = "month", format = "%b")
#or
p + scale_x_date(major = "month", format = "%B %Y")
Run Code Online (Sandbox Code Playgroud)

有关?strftime格式字符串含义的详细信息,请参阅.