用Rg中的ggplot按周绘图

时间:2015-05-25 04:54:57

标签: r ggplot2

我有以下数据:

set.seed(123)
timeseq <- as.Date(Sys.time() + cumsum(runif(1000)*86400))
data <- rnorm(1000)
df <- data.frame(timeseq,data)

我想知道是否有人知道如何按周聚合data。我试图做的是绘制一个时间序列ggplot,所以如果我可以跳过这一步并让ggplot处理这个更好。一直困在这一天。

4 个答案:

答案 0 :(得分:4)

使用dplyr按周手动聚合的另一种方法。

library(dplyr)
df$weeks <- cut(df[,"timeseq"], breaks="week")
agg <- df %>% group_by(weeks) %>% summarise(agg=sum(data))
ggplot(agg, aes(as.Date(weeks), agg)) + geom_point() + scale_x_date() +
    ylab("Aggregated by Week") + xlab("Week") + geom_line()

enter image description here

答案 1 :(得分:1)

您还可以使用numpy.isnan(A.astype(float)) 函数的scale_x_date()参数汇总日期审美。

breaks

答案 2 :(得分:0)

要获得本周,我们可以使用lubridate库,floor_date函数如下:

library(lubridate)
df$week <- floor_date(df$timeseq, "week")

我们可以使用ggplot通过执行统计信息摘要来绘制数据(可能有更好的方法吗?),它看起来像这样:

stat_sum_single <- function(fun, geom="point", ...) {
  stat_summary(fun.y=fun, colour="red", geom=geom, size = 3, ...)
}

ggplot(df, aes(x=floor_date(timeseq, "week"), y=data)) + 
  stat_sum_single(sum, geom="line") + 
  xlab("week")

将输出:

enter image description here

答案 3 :(得分:0)

我想扩展@chappers使用软件包lubridate的想法,但要采用完全管道的方式。

library(dplyr)
library(ggplot2)
library(lubridate)
set.seed(123)
data.frame(
  timeseq = as.Date(Sys.time() + cumsum(runif(1000) * 86400)),
  data = rnorm(1000)
) %>%
  mutate(timeseq = floor_date(timeseq, unit = "week")) %>%
  group_by(timeseq) %>%
  summarise(data = sum(data)) %>%
  ggplot() +
  geom_line(aes(x = timeseq, y = data))

如果data.frame行已经存储为对象,请用df替换行。