2015-09-19 42 views
5

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

我以前没有用过ggplot。到目前为止,我刚刚使用R中的普通(基本)地块。但我想看看ggplot会是什么样子。

这是我到目前为止有:

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

这绘制所有的点,它看起来不错,但我不知道怎么刚绘制的手段和添加的置信区间。

+1

你应该检查这里:http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/ – AntoniosK

+1

看看'?stat_smooth'。 – Jaap

+0

由于你是(相对)新的SO,请阅读[this](http://stackoverflow.com/help/mcve)和[this](http://stackoverflow.com/questions/5963269/how-to - 制作一个很好的可重现的例子/ 5963610#5963610)关于如何提出一个精心制作的问题,这个问题更可能得到解答。 – jlhoward

回答

13

由于您复制了数据,并且想要绘制平均值/ 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(...)功能使用geom="line" y值,和绘图层,汇总方式相同,但地块的一层使用geom="point"以及使用geom="ribbon"的图层这个几何图形需要yminymax美学,所以我们使用内置的ggplot函数mean_cl_normal来生成那些基于错误是正态分布的假设,因此,平均值遵循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忽略了无关的参数(因此没有错误)。显然,新版本更为严格。可能这是更好的。

+1

我稍微喜欢'stat_summary(geom =“ribbon”,fun.data = mean_cl_normal,color = NA,alpha = 0。1)' –

+0

实际上我更喜欢误差线,但实际上我误解了这个问题--OP想要色带。我编辑了我的回复。 – jlhoward

+0

谢谢!太棒了。我会确保我下次在我的问题中提供样本数据等。 – 91dpo