使用GGPLOT2累计情节(cumulative plot using ggplot2)

2019-08-19 23:28发布

我正在学习使用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")

Answer 1:

试试这个:

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

只是删除geom_point()如果你不想要它。

编辑:既然你需要绘制数据,例如与X标签的日期,你可以用绘制x=1:5 ,并使用scale_x_discrete设置labelsdata.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")

既然你说你有超过1个val为“约会”,你可以聚集他们先用plyr ,例如。

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

然后,可以使用通过替换相同的命令进行x = 1:5x = seq_len(nrow(dd))



Answer 2:

几年后,我已经谈妥做:

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


Answer 3:

扬·博耶似乎已经找到了一个更简洁的解决这个问题这个问题 ,我已经缩短了一下,结合的答案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在他的回答以上。



文章来源: cumulative plot using ggplot2