使用ggplot2的累积图

edd*_*ddi 12 r ggplot2 cumulative-sum

我正在学习使用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")
Run Code Online (Sandbox Code Playgroud)

Aru*_*run 27

试试这个:

ggplot(df, aes(x=1:5, y=cumsum(val))) + geom_line() + geom_point()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

geom_point()如果您不想要它,请删除.

编辑:由于您需要绘制数据,因此x标签是日期,您可以使用x=1:5并使用scale_x_discrete来设置labels新的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")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

由于您说val"日期"的数量超过1 ,因此您可以先使用它们进行聚合plyr,例如.

require(plyr)
dd <- ddply(df, .(date), summarise, val = sum(val))
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过更换使用相同的命令继续x = 1:5x = seq_len(nrow(dd)).


edd*_*ddi 6

几年后,我决定做:

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