R 使用ggplot2绘制数据集每x值的平均值和sd

R 使用ggplot2绘制数据集每x值的平均值和sd,r,ggplot2,R,Ggplot2,我有一个看起来有点像这样的数据集: 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() ?统计摘要是您应该查看的内容 这里有一个例子 # functions to calculate the u

我有一个看起来有点像这样的数据集:

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()

?统计摘要是您应该查看的内容

这里有一个例子

# functions to calculate the upper and lower CI bounds
uci <- function(y,.alpha){mean(y) + qnorm(abs(.alpha)/2) * sd(y)}
lci <- function(y,.alpha){mean(y) - qnorm(abs(.alpha)/2) * sd(y)}
ggplot(a, aes(x=x,y=y))  + stat_summary(fun.y = mean, geom = 'line', colour = 'blue') + 
            stat_summary(fun.y = mean, geom = 'ribbon',fun.ymax = uci, fun.ymin = lci, .alpha = 0.05, alpha = 0.5)
#用于计算CI上限和下限的函数

uci您可以使用一个内置的摘要功能
mean\u sdl
。代码如下所示

ggplot(a, aes(x=x,y=y)) + 
 stat_summary(fun.y = 'mean', colour = 'blue', geom = 'line')
 stat_summary(fun.data = 'mean_sdl', geom = 'ribbon', alpha = 0.2)

您可以尝试按照Hadley Wickham在
ggplot2
网站上的建议编写摘要函数:。将他的建议应用于您的代码:

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") 

p使用ggplot2 0.9.3.1,以下内容为我提供了窍门:

ggplot(a, aes(x=x,y=y)) + geom_point() +
 stat_summary(fun.data = 'mean_sdl', mult = 1, geom = 'smooth')
“mean_sdl”是Hmisc软件包函数“smean.sdl”的实现,mult变量给出了显示多少标准偏差(高于和低于平均值)

有关原始功能的详细信息:

library('Hmisc')
?smean.sdl

美好的但我真的不明白你为什么要用那个函数来包装它。为什么不直接使用
p+stat\u summary(“mean\u cl\u normal”,geom=“smooth”,color=“blue”,width=0.2”)
?另外,
宽度=0.2
用于什么?似乎对输出没有太大影响…该函数使用
Hmisc
包中的摘要函数。我原以为
width=0.2
会改变行的宽度,但它似乎没有像你说的那样做任何事情,所以它显然没有任何功能<代码>大小
将改变线条的宽度。是的,看到了
mean_sdl
包含一条平均线,因此您不需要第二条线。@没有,但
geom='ribbon'
没有,因此他需要第二条线。
library('Hmisc')
?smean.sdl