在ggplot2中使用平均剖面的分面时间序列

6

使用以下模拟时间序列:

n=70
m1 = matrix(rnorm(n), ncol=7)
m2 = matrix(rnorm(n, 0,4), ncol=7)
d = data.frame(rbind(m1,m2), cl=rep(c(1,2), each=5))

(前7列代表时间点,最后一列代表类别)

使用ggplot2是否可以构建一个包含每个图中平均曲线的分面时间序列?

结果应该看起来像这样:plot with mean curves

1个回答

12

这并不是最优美的代码,但我相信它可以帮你达到你想要的效果。

n=70
m1 = matrix(rnorm(n), ncol=7)
m2 = matrix(rnorm(n, 0,4), ncol=7)
d = data.frame(rbind(m1,m2), cl=rep(c(1,2), each=5))

d <- cbind(paste("d", 1:NROW(d), sep = ""), d)
names(d)[1] <- "id.var"

library(reshape)
longDF <- melt(d, id=c("cl", "id.var"))
library(ggplot2)

p <- ggplot(data = longDF, aes(x = variable, y = value, group = id.var))
p + geom_line() + stat_smooth(aes(group = 1), method = "lm", 
se = FALSE, colour="red") + facet_grid(cl ~ .)
请毫不犹豫地改进我的代码。

带有stat_smooth和facet_grid的意大利面图


2
很高兴能帮忙,我知道卡住的感觉。你应该尝试将 se = FALSE 改为 se = TRUE,我经常发现这些信息非常有用。 - Eric Fail
@Eric,我想知道longDF是如何创建的。我猜测使用了reshape中的melt函数... - blue and grey
1
@blueandgrey,我不知道怎么回事,我把自己的代码变得更加简洁了,结果搞砸了。不过,现在应该可以正常工作了! - Eric Fail
1
stat_smooth(aes(group = 1), method = "lm", se = FALSE, colour="red") 应该改为 stat_summary(fun.y=mean, colour="red", geom="line", aes(group=1))。当前的解决方案在所有观测值上添加了趋势线,但没有在 Xi 下的所有观测值的平均值上添加。不确定 OP 真正想要什么,但发布的图像表明有一个弯曲的红线。 - CMichael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接