如果我有一个数据表,其中每个时间戳都有多个观察值的时间序列,是否有直接的方法来绘制该数据集的平均值和区间范围?
例如,创建以下数据集:
每个时间戳都有多个观测值。我想要的图表应该类似于这样:
感谢您的帮助!
例如,创建以下数据集:
dt <- lapply(seq(1,10),function(x) {
dt <- data.table(Time = seq(1,100),
Value = seq(1,100)* 3 + rnorm(100,5,20))
})
dt <- rbindlist(dt,idcol = 'Run')
ggplot(dt,aes(Time,Value,group = Run)) +
geom_line(size = 0.1,alpha = 0.5)
每个时间戳都有多个观测值。我想要的图表应该类似于这样:
ggplot(dt[,list(Value = mean(Value),
MaxValue = quantile(Value, 0.9),
MinValue = quantile(Value, 0.1)),
list(Time)])+
aes(x = Time, y = Value,ymin = MinValue,ymax = MaxValue)+
geom_line()+
geom_ribbon(alpha = 0.3)
这个方法是可行的,但看起来似乎对于应该更简单的事情而言,有点复杂。例如,如果我要生成盒须图,只需使用更简单的ggplot调用即可:
ggplot(dt)+
aes(x = factor(Time), y = Value)+
geom_boxplot()
感谢您的帮助!
geom = "smooth"
,则可以在一次调用中完成。 - alistairegeom_smooth
的方法是lm
、glm
或loess
,带有标准误差。这可能不是 OP 想要的。 - wwwgeom_smooth
,而是结合stat_summary
使用,例如ggplot(dt, aes(Time, Value)) + geom_smooth(stat = 'summary', fun.data = function(y) data.frame(ymin = quantile(y, .1), y = mean(y), ymax = quantile(y, .9)))
。geom_smooth
仅仅是条带和线条的组合;stat_smooth
才是调用模型的函数。 - alistairegeom_smooth
的这种用法。我已根据您的评论更新了我的答案。 - www