以下代码使用Hmisc,ddply和ggplot生成带有标准误差线的条形图:
means_se <- ddply(mtcars,.(cyl),
function(df) smean.sdl(df$qsec,mult=sqrt(length(df$qsec))^-1))
colnames(means_se) <- c("cyl","mean","lower","upper")
ggplot(means_se,aes(cyl,mean,ymax=upper,ymin=lower,group=1)) +
geom_bar(stat="identity") +
geom_errorbar()
但是,使用诸如mean_sdl之类的辅助函数实现上述功能似乎要好得多。例如,以下代码生成具有95%CI误差条的图:
ggplot(mtcars, aes(cyl, qsec)) +
stat_summary(fun.y = mean, geom = "bar") +
stat_summary(fun.data = mean_sdl, geom = "errorbar")
我的问题是如何将stat_summary实现用于标准错误栏。问题是要计算SE,你需要每个条件的观测数量,这必须在mean_sdl的乘数中访问。
如何在ggplot中访问此信息?对此有一个简洁的非hacky解决方案吗?
答案 0 :(得分:42)
好吧,我不能告诉你如何将一组乘数加到stat_summary
。
但是,您的目标似乎是绘制平均值和误差线,它们代表ggplot
中均值的一个标准误差,而不会在绘图前汇总数据集。
ggplot2 中有mean_se
个功能,我们可以使用 Hmisc 代替mean_cl_normal
。 mean_se
函数的乘数为1,因此如果我们需要标准误差条,我们不需要传递任何额外的参数。
ggplot(mtcars, aes(cyl, qsec)) +
stat_summary(fun.y = mean, geom = "bar") +
stat_summary(fun.data = mean_se, geom = "errorbar")
如果您想使用mean_cl_normal
中的Hmisc
函数,则必须将乘数更改为1,以便从均值获得一个标准误差。 mult
参数是mean_cl_normal
的参数。您需要传递给正在使用的汇总函数的参数需要作为fun.args
参数的列表给出:
ggplot(mtcars, aes(cyl, qsec)) +
stat_summary(fun.y = mean, geom = "bar") +
stat_summary(fun.data = mean_cl_normal, geom = "errorbar", fun.args = list(mult = 1))
在2.0版本的 ggplot2 中,参数可以直接传递:
ggplot(mtcars, aes(cyl, qsec)) +
stat_summary(fun.y = mean, geom = "bar") +
stat_summary(fun.data = mean_cl_normal, geom = "errorbar", mult = 1)