我有一些从模型中收集的数据。我想绘制一个人口的大小随着时间的推移。我有每个时间步的人口规模,100个重复。我想绘制每个时间步长的平均人口规模,以及95%置信区间(如果可能的话,作为阴影)。
之前我没有使用ggplot
。到目前为止,我一直在使用R中的普通(基础)图。但我希望看到ggplot
的样子。
这是我到目前为止所拥有的:
ggplot(data=model1, aes(x=steps., y= pop-size, col='blue')) +
geom_line()
这绘制了所有点,它看起来不错,但我不知道如何绘制平均值并增加置信区间。
答案 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忽略了无关的参数(因此没有错误)。显然,新版本更严格。可能这更好。