我正在学习使用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")
试试这个:
ggplot(df, aes(x=1:5, y=cumsum(val))) + geom_line() + geom_point()
只是删除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")
既然你说你有超过1个val
为“约会”,你可以聚集他们先用plyr
,例如。
require(plyr)
dd <- ddply(df, .(date), summarise, val = sum(val))
然后,可以使用通过替换相同的命令进行x = 1:5
与x = seq_len(nrow(dd))
几年后,我已经谈妥做:
ggplot(df, aes(as.Date(as.character(date), '%Y%m%d'), cumsum(val))) + geom_line()
扬·博耶似乎已经找到了一个更简洁的解决这个问题这个问题 ,我已经缩短了一下,结合的答案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在他的回答以上。