【问题标题】:plotting the means with confidence intervals with ggplot用 ggplot 绘制带有置信区间的均值
【发布时间】:2015-09-19 14:39:38
【问题描述】:

我有一些从模型中收集的数据。我想绘制一段时间内的人口规模。我在每个时间步都有人口规模,并且有 100 个重复。我想绘制每个时间步的平均人口规模,以及 95% 的置信区间(如果可能,作为阴影)。

我之前没用过ggplot。到目前为止,我一直在使用 R 中的普通(基本)图。但我想看看ggplot 会是什么样子。

这是我目前所拥有的:

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

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

【问题讨论】:

标签: r


【解决方案1】:

由于您已经复制了数据,并且您想要绘制均值/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" 绘制的层,使用相同方式总结但使用 geom="point" 绘制的层,以及使用 geom="point" 绘制的层使用geom="ribbon" 这个geom 需要yminymax 美学,所以我们使用内置的ggplot 函数mean_cl_normal 来生成那些基于错误是正态分布的假设,因此,方法遵循a t-分布。键入 ?hmisc 以获取有关对置信限有用的各种函数的文档。图层按代码顺序渲染,所以,既然要着色,我们需要先放错误功能区。

最后,当然可以自己总结数据,使用dplyr或类似的东西,但我真的不明白这样做的意义。

更新(基于最近的评论): 看起来ggplot2 (2.0.0) 的最新版本以不同的方式指定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")

我认为width=... 参数的问题有点微妙:实际上不需要它(在原始答案中,我使用了错误栏,当我将其更改为功能区时忘记删除此参数)。旧版本的 ggplot2 忽略了无关的参数(因此没有错误)。显然,新版本更加严格。可能这样更好。

【讨论】:

  • 我更喜欢stat_summary(geom="ribbon", fun.data=mean_cl_normal, colour=NA,alpha=0.1)
  • 我实际上更喜欢误差线,但实际上我误读了这个问题 - OP 想要丝带。我编辑了我的回复。
  • 谢谢!太棒了。下次我会确保在我的问题中放入示例数据等。
  • 这很好,但是新的 ggplot2 破坏了它吗?当我使用 ggplot2_2.2.0 和 Hmisc_3.17-1 运行上述代码时,我收到此错误:错误:未知参数:宽度,conf.int
  • 谢谢,太好了!
猜你喜欢
  • 2020-08-04
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
相关资源
最近更新 更多