如何用 R 语言绘制嵌套条形图
精鼎统计
多嵌套图拼接的 R 语言实现
1. 原文研究设计及图片还原思路
首先来看一下文献的原图吧~
原文作者在对不同年龄(幼鼠和成年鼠),不同性别(雌/雄)进行某种刺激后,在 7 个时间点(1 为刺激前,6 为最后 1 次刺激,7 为刺激后一段时间)分别对 3 个效应指标进行了测量。在进行结果展示时,作者放弃了常规的统计表格,选择了上图的形式,按照年龄,性别分为 4 层,每层 3 个子图,分别反映 3 个不同的指标。
不难看出,原图由 12 个嵌套图组成,每个嵌套图又由 1 个主图和 1 个子图拼接而成。其中,主图采用散点与误差棒结合的形式展示了某效应指标在 7 个时间点的均值和标准误,而每个时点与刺激前的差异显著性则以「」的形式进行标注;子图则为柱状图与误差棒的结合,主要比较了最后一次刺激及刺激后与刺激前效应指标水平的差异,同样也标注了两两比较的差异显著性,与主图的区别是,这里选择了以横线对两个比较时点进行了标注。
基于以上思路,小 x 利用 R 软件的 ggplot2 包对原图进行了还原:
简单地说,除了外边框(合理怀疑原图的边框是 AI 或者 PS 后期处理的)和坐标轴没有完全实现(x 轴时间点 6 和 7 之间截断失败)外,其他还算是基本还原了。
2. 嵌套图实现
借助 ggplot2 及 ggsignif 包,小 x 对嵌套图 A 进行了还原。两个包的说明文档可以参考:
https://cran.rproject.org/web/packages/ggplot2 /index.html
https://github.com/const-ae/ggsignif
首先,生成模拟数据并加载所需的 R 包:
自定义图片的主题:
利用散点图 (geom_point) 和误差棒 (geom_errorbar) 的叠加,绘制嵌套主图 p1,并手动标注 (geom_text) 显著性水平:
利用条形图 (geom_bar) 和误差棒 (geom_errorbar) 的叠加,绘制嵌套子图 p2,并借助 ggsignif 包 (geom_signif) 标注组间差异显著性:
利用生成 ggplotGrob() 生成图形对象列表(grob, graphical object) 后,利用 annotation_custom 通过添加注释的方式, 向图形内部添加子图:
3. 嵌套图拼接
类似地,可以完成其余 11 幅嵌套图 (p02 -p12) 的绘制。
对于图片的拼接,小 x 利用了 gridExtra 包实现,说明文档可以参考:
https://cran.r-project.org/web/packages/gridExtra/index.html
嗯,到目前为止,图片就基本还原了。至于外边框和标注,各位小伙伴就借助 AI 和 PS 进行美化吧。希望你们觉得有意思。