【问题标题】:cumulative plot using ggplot2使用ggplot2的累积图
【发布时间】:2013-03-28 12:24:55
【问题描述】:

我正在学习使用ggplot2,并正在寻找最小的ggplot2 代码,它可以重现下面的base::plot 结果。我已经尝试了一些东西,但它们最终都非常长,所以我正在寻找最小的表达式,理想情况下希望在 x 轴上有日期(不存在在下面的plot 中)。

df = data.frame(date = c(20121201, 20121220, 20130101, 20130115, 20130201),
                val  = c(10, 5, 8, 20, 4))
plot(cumsum(rowsum(df$val, df$date)), type = "l")

【问题讨论】:

    标签: r ggplot2 cumulative-sum


    【解决方案1】:

    试试这个:

    ggplot(df, aes(x=1:5, y=cumsum(val))) + geom_line() + geom_point()
    

    如果您不想要,只需删除 geom_point()

    编辑:由于您需要使用 x 标签为日期绘制数据,因此您可以使用x=1:5 绘制并使用scale_x_discretelabels 设置为新的data.frame。以df

    ggplot(data = df, aes(x = 1:5, y = cumsum(val))) + geom_line() + 
            geom_point() + theme(axis.text.x = element_text(angle=90, hjust = 1)) + 
            scale_x_discrete(labels = df$date) + xlab("Date")
    

    既然您说“日期”将有多个val,您可以先使用plyr 聚合它们。

    require(plyr)
    dd <- ddply(df, .(date), summarise, val = sum(val))
    

    然后您可以通过将x = 1:5 替换为x = seq_len(nrow(dd)) 来继续执行相同的命令。

    【讨论】:

    • 谢谢,与plot 相比,这相当长。 ggplot 至少可以通过在x 轴上添加日期来赎回自己,可能旋转了 90 度? :)
    • quote:“理想情况下,希望将日期放在 x 轴上(下图中没有)。”
    • 我还尝试编辑您的帖子以修复每个日期超过 1 个 val 的情况,但编辑尚未完成。
    • 谢谢!只需向df 添加另一个具有相同日期和一些val 的条目,然后查看plot 输出。这将是val 的每日累计总和。
    • 我会将此标记为已回答,但请修复 rowsum 位以供将来参考。不能说这很漂亮,但是谢谢:)
    【解决方案2】:

    几年后,我决定做:

    ggplot(df, aes(as.Date(as.character(date), '%Y%m%d'), cumsum(val))) + geom_line()
    

    【讨论】:

      【解决方案3】:

      Jan Boyer 似乎在this question 中找到了解决此问题的更简洁的方法,我将其缩短了一点,并结合Prradep 的答案,以便提供(希望)最新的日期答案:

      ggplot(data = df, 
         aes(x=date)) +
      geom_col(aes(y=value)) +
      geom_line(aes(x = date, y = cumsum((value))/5, group = 1), inherit.aes = FALSE) +
      ylab("Value") + 
      theme(axis.text.x = element_text(angle=90, hjust = 1))
      

      请注意,date 不是日期格式,而是character,并且value 已经按照Prradep 在上面的回答中的建议进行了分组。

      【讨论】:

      • 也许我遗漏了一些东西 - 但这如何更简洁?
      猜你喜欢
      • 1970-01-01
      • 2013-08-23
      • 2021-05-04
      • 2021-05-12
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多