我想使用 ggplot 绘制以下图:
这是我的 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 库来做到这一点?
我认为您提供的示例数据框没有以适当的方式构建,因为
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)
如果您有原始数据,而不是每个单元格的平均值和标准差的汇编,则可以使用
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
将位于不同的面板中。结果是
然后您可以添加其他图形指令,例如,
superb(DV ~ replicate + class + group, raw.df,
plotStyle="point" ) +
theme_bw() +
ylab("My variable")