在ggplot中绘制置信区间

4
我希望能够使用ggplot绘制以下图表: 按组显示置信区间的GgPlot 这是我的数据框架的结构示例(画得不是很准确,但数据大致如此):
example.df = data.frame(mean = c(0.3,0.8,0.4,0.65,0.28,0.91,0.35,0.61,0.32,0.94,0.1,0.9,0.13,0.85,0.7,1.3), 
                            std.dev = c(0.01,0.03,0.023,0.031,0.01,0.012,0.015,0.021,0.21,0.13,0.023,0.051,0.07,0.012,0.025,0.058),
                            class = c("1","2","1","2","1","2","1","2","1","2","1","2","1","2","1","2"),
                            group = c("group1","group2","group1","group2","group1","group2","group1","group2","group1","group2","group1","group2","group1","group2","group1","group2"))

此数据框由16个复制品组成,每个复制品都有一个给定的平均值和标准偏差。

对于每个复制品,我希望绘制置信区间图,其中我的图表示例中的大点是平均估计值,杆的长度为两倍的标准偏差。

同时,我想在同一行中绘制两个不同的副本,但使用不同的颜色进行着色,按类别着色,红色表示类别1,蓝色表示类别2。

最后,我想将整个图分为两个面板(在同一行中),对应于两个不同的组。

我尝试查看这个站点:http://www.cookbook-r.com/Graphs/Plotting_means_and_error_bars_(ggplot2)/,但无法弄清楚如何针对此结构的任何数据框自动执行此操作,具有X个组(在此情况下为2)和K个复制品每组(在此情况下为8,其中4个为1类,4个为2类)。

是否有一种使用ggplot或标准r pkg库来完成此操作的好方法?


4
你可以在这里找到一些可能相关的示例:http://docs.ggplot2.org/current/stat_summary.html。如果你展示了自己的尝试,就更有可能得到帮助。提问时需要包括尝试过的解决方案、为什么它们不起作用以及预期的结果,而且如果问题要求提供代码,必须包含这些信息。 - Henrik
@Henrik,我的数据看起来不像那样,所以我必须做很多处理才能得到那个数据框架,我认为从那个数据框架结构会有一条ggplot线来绘制图表,但可能是错的。我已经尝试了geom,但我还没有能够把两个点的置信区间放在同一个x轴上。 - Dnaiel
1个回答

6

我认为你提供的示例数据框构建得不合适,因为group1中的所有值都具有类别1,而在group2中所有值都是类别2。因此,我创建了一个新的数据框,并添加了一个名为replicate的新列,该列显示复制次数(每个group中有四个复制品(每个class值有两个))。

example.df = data.frame(mean = c(0.3,0.8,0.4,0.65,0.28,0.91,0.35,0.61,0.32,0.94,0.1,
                                0.9,0.13,0.85,0.7,1.3), 
                        std.dev = c(0.01,0.03,0.023,0.031,0.01,0.012,0.015,0.021,0.21,
                                  0.13,0.023,0.051,0.07,0.012,0.025,0.058),
                        class = c("1","2","1","2","1","2","1","2","1","2","1",
                                 "2","1","2","1","2"),
                        group = rep(c("group1","group2"),each=8),
                        replicate=rep(rep(1:4,each=2),time=2))

现在您可以使用geom_pointrange()来获取带置信区间的点,并使用facet_wrap()为每个组制作图表。
ggplot(example.df,aes(factor(replicate),
               y=mean,ymin=mean-2*std.dev,ymax=mean+2*std.dev,color=factor(class)))+
  geom_pointrange()+facet_wrap(~group)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接