我有一个看起来像这样的数据集:
a <- data.frame(x=rep(c(1,2,3,5,7,10,15,20), 5),
y=rnorm(40, sd=2) + rep(c(4,3.5,3,2.5,2,1.5,1,0.5), 5))
ggplot(a, aes(x=x,y=y)) + geom_point() +geom_smooth()
我想要与该图相同的输出,但是我只想取每组x值的均值/sd值之间的线段,而不是平滑的曲线。该图应与上面的图相似,但呈锯齿状,而不是弯曲的。
我试过了,但是即使x值不是唯一的,它也失败了:
ggplot(a, aes(x=x,y=y)) + geom_point() +stat_smooth(aes(group=x, y=y, x=x))
geom_smooth: Only one unique x value each group.Maybe you want aes(group = 1)?
最佳答案
您可以尝试按照网站上Hadley Wickham的建议为ggplot2
:http://had.co.nz/ggplot2/stat_summary.html编写摘要功能。将他的建议应用于您的代码:
p <- qplot(x, y, data=a)
stat_sum_df <- function(fun, geom="crossbar", ...) {
stat_summary(fun.data=fun, colour="blue", geom=geom, width=0.2, ...)
}
p + stat_sum_df("mean_cl_normal", geom = "smooth")
结果如下图所示:
关于r - 使用ggplot2绘制每个x值的数据集的平均值和sd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12033319/