在 ggplot 中绘制置信区间

问题描述 投票:0回答:2

我想使用 ggplot 绘制以下图:

GgPlot of Confidence Intervals by Group

这是我的 df 结构的示例(有点,不按数据比例绘制):

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 个、第 1 类的 4 个和第 2 类的 4 个)。

有没有好的方法使用 ggplot 或标准 r pkg 库来做到这一点?

r plot ggplot2
2个回答
7
投票

我认为您提供的示例数据框没有以适当的方式构建,因为

group1
中的所有值都有
class
1
,并且
group2
中的所有值都是
2
类。因此,我制作了新的数据框,还添加了名为
replicate
的新列,该列显示重复次数(每个
class
中有四个重复(具有两个
group
值))。

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


0
投票

如果您有原始数据,而不是每个单元格的平均值和标准差的汇编,则可以使用

superb
带有误差线的汇总图)自动汇总分数。

library(superb)

让我们模拟数据来说明我的观点:

raw.df <- GRD( SubjectsPerGroup = 20, 
    BSFactors = c("class(1,2)", "group(group1,group2)", "replicate(4)")
)
head(raw.df)

因变量存储在 DV 列中。

superb(DV ~ replicate + class + group, raw.df, 
       plotStyle="point" )

在这里,第一个命名的

replicate
将位于 x 轴上,
class
将具有不同的颜色,最后命名的
group
将位于不同的面板中。结果是

Mean plot of the 4 x 2 x 2 dataset

然后您可以添加其他图形指令,例如,

superb(DV ~ replicate + class + group, raw.df, 
       plotStyle="point" ) + 
theme_bw() + 
ylab("My variable")
© www.soinside.com 2019 - 2024. All rights reserved.