用ggplot用置信区间绘制平均值

时间:2015-09-19 14:39:38

标签: r

我有一些从模型中收集的数据。我想绘制一个人口的大小随着时间的推移。我有每个时间步的人口规模,100个重复。我想绘制每个时间步长的平均人口规模,以及95%置信区间(如果可能的话,作为阴影)。

之前我没有使用ggplot。到目前为止,我一直在使用R中的普通(基础)图。但我希望看到ggplot的样子。

这是我到目前为止所拥有的:

ggplot(data=model1, aes(x=steps., y= pop-size, col='blue')) + 
   geom_line()

这绘制了所有点,它看起来不错,但我不知道如何绘制平均值并增加置信区间。

1 个答案:

答案 0 :(得分:19)

由于您已经复制了数据,并且您想要绘制平均值/ CL,因此最好使用stat_summary(...)来设计(您猜对了)汇总数据。基本上,它将函数应用于每个x值的所有y值(例如,mean(...)函数),然后使用您指定的任何几何图形绘制结果。这是一个例子:

# sample data - should be provided in question
set.seed(1)      # for reproducible example
time <- 1:25
df   <- data.frame(time,
                   pop=rnorm(100*length(time), mean=10*time/(25+time)))

library(ggplot2)
ggplot(df, aes(x=time, y=pop))+ 
  stat_summary(geom="ribbon", fun.data=mean_cl_normal, width=0.1, conf.int=0.95, fill="lightblue")+
  stat_summary(geom="line", fun.y=mean, linetype="dashed")+
  stat_summary(geom="point", fun.y=mean, color="red")

所以这里我们有3个图层:一个使用mean(...)函数汇总y值的图层,以及使用geom="line"绘制的图表,这个图层以相同的方式汇总,但使用{{1}绘图},以及使用geom="point"的图层这个geom需要geom="ribbon"ymin美学,因此我们使用内置的ggplot函数ymax来生成基于以下假设:错误是正态分布的,因此,均值遵循t分布。输入mean_cl_normal以获取有关置信度限制的各种函数的文档。这些图层按照代码的顺序呈现,因此,由于您需要着色,我们需要首先放置错误功能区。

最后,当然可以使用?hmisc或其他类似的方式自行汇总数据,但我真的没有看到这样做的重点。

更新(根据最近的评论): 看起来最新版本的dplyr(2.0.0)有一种不同的方式来指定ggplot2的参数。这适用于新版本:

fun.data

我认为ggplot(df, aes(x=time, y=pop))+ stat_summary(geom="ribbon", fun.data=mean_cl_normal, fun.args=list(conf.int=0.95), fill="lightblue")+ stat_summary(geom="line", fun.y=mean, linetype="dashed")+ stat_summary(geom="point", fun.y=mean, color="red") 参数的问题有点微妙:它实际上并不需要(在原始答案中我使用了错误栏,当我将其更改为时忘记删除此参数带)。旧版本的ggplot2忽略了无关的参数(因此没有错误)。显然,新版本更严格。可能这更好。