基本简介
森林图(forest plot),一般是指在平面直角坐标系中,以一条垂直于X轴的无效线(通常坐标X=1或0)为中心,用若干条平行于X轴的线段,来表示每个研究的效应量大小及其95%可信区间,并用一个棱形来表示多个研究合并的效应量及可信区间,它是Meta分析中最常用的结果综合表达形式。实际上,除了Meta分析,森林图还有很多用处。森林图可以直观的反映出效应量(例如RR、OR、HR或者WMD)大小及其95% CI等。
基本用法
本篇文章利用ggplot2包进行绘制森林图(严格意义上应该叫meta分析效应量图),关于ggplot2的基本用法这里不在叙述。
示例
这里想用发表在SBB上的一篇meta分析文章(https://doi.org/10.1016/j.soilbio.2020.108118)中的图作为模板,进行绘制。
#清空工作台
rm(list=ls())
## 加载程序包
library(ggplot2)#作图
library(ggthemes)#主题
##建立数据集
dataset <- data.frame(
Varnames = c("Tropical forest","Temperate forest","Boreal forest","All forest","Cropland","Grassland","Overall"),
lnRR = c(0.9, 2, -0.3, 0.4, 0.5, -1.3, 2.3),
Lower=c(0.55, 1.79, -0.08, 0.2, 0.28, -1.05, 2.01),
Upper=c(1.05, 2.21, -0.42, 0.6, 0.62, -1.45, 2.5))
#转换为因子,设置排列顺序使用
dataset$Varnames<-factor(dataset$Varnames,levels= c("Tropical forest","Temperate forest","Boreal forest","All forest","Cropland","Grassland","Overall"))
#查看数据集
dataset
##作图
a<-ggplot(dataset, aes(lnRR, Varnames))+
geom_point(size=5,color = "orange")+
geom_errorbarh(aes(xmax =Upper, xmin = Lower),size= 1,height = 0.1, colour = "orange") +
scale_x_continuous(limits= c(-2.5, 2.5))+
geom_vline(aes(xintercept = 0),color="gray",linetype="dashed", size = 1.5) +
xlab('Effect size (lnRR) ')+
ylab(' ')+
theme_few()+
theme(axis.text.x = element_text(size = 14, color = "black"))+
theme(axis.text.y = element_text(size = 14, color = "black"))+
theme(title=element_text(size=14))+
geom_hline(aes(yintercept = 6.5), colour = "gray",
linetype = "dashed", size = 0.5)+#画横线
geom_hline(aes(yintercept = 4.5), colour = "gray",
linetype = "dashed", size = 0.5)+#画横线
geom_hline(aes(yintercept = 3.5), colour = "gray",
linetype = "dashed", size = 0.5)+#画横线
annotate("text", label = "QM=5.85, P=0.018",###添加注释文字1
x = 1.69, y = 3.3, size =4.5, colour = "black")+
annotate("text", label = "QM=0.85, P<0.01",###添加注释文字2
x = 1.69, y = 4.3, size =4.5, colour = "black")+
annotate("text", label = "QM=5.85, P=0.000",###添加注释文字3
x = 1.6, y = 6.3, size =4.5, colour = "black")+
annotate("text", label = "QM=10.88, P<0.0001",###添加注释文字4
x = 1.49, y = 7.4, size =4.5, colour = "black")+
annotate("text", label = "***",###添加注释文字1
x = 1.3, y = 0.98, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字2
x = 1.55, y = 1.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字3
x = -0.7, y = 2.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字4
x = 0.9, y = 3.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字5
x = 0.90, y = 4.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字6
x = -0.7, y = 5.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字7
x = 1.75, y = 6.95, size =6, colour = "black")
#查看图a
a
再把图a复制一张
b<-ggplot(dataset, aes(lnRR, Varnames))+
geom_point(size=5,color = "orange")+
geom_errorbarh(aes(xmax =Upper, xmin = Lower),size= 1,height = 0.1, colour = "orange") +
scale_x_continuous(limits= c(-2.5, 2.5))+
geom_vline(aes(xintercept = 0),color="gray",linetype="dashed", size = 1.5) +
xlab('Effect size (lnRR) ')+
ylab(' ')+
theme_few()+
theme(axis.text.x = element_text(size = 14, color = "black"))+
theme(axis.text.y = element_text(size = 14, color = "black"))+
theme(title=element_text(size=14))+
geom_hline(aes(yintercept = 6.5), colour = "gray",
linetype = "dashed", size = 0.5)+#画横线
geom_hline(aes(yintercept = 4.5), colour = "gray",
linetype = "dashed", size = 0.5)+#画横线
geom_hline(aes(yintercept = 3.5), colour = "gray",
linetype = "dashed", size = 0.5)+#画横线
annotate("text", label = "QM=5.85, P=0.018",###添加注释文字1
x = 1.65, y = 3.3, size =4.5, colour = "black")+
annotate("text", label = "QM=0.85, P<0.01",###添加注释文字2
x = 1.69, y = 4.3, size =4.5, colour = "black")+
annotate("text", label = "QM=5.85, P=0.000",###添加注释文字3
x = 1.6, y = 6.3, size =4.5, colour = "black")+
annotate("text", label = "QM=10.88, P<0.0001",###添加注释文字4
x = 1.49, y = 7.4, size =4.5, colour = "black")+
annotate("text", label = "***",###添加注释文字1
x = 1.3, y = 0.98, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字2
x = 1.55, y = 1.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字3
x = -0.7, y = 2.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字4
x = 0.9, y = 3.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字5
x = 0.90, y = 4.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字6
x = -0.7, y = 5.95, size =6, colour = "black")+
annotate("text", label = "***",###添加注释文字7
x = 1.75, y = 6.95, size =6, colour = "black")
#拼图
#加载组合多图所需包
library(patchwork)
#组合a和b两张图并分别把小图给命名a和b
c<-(a+b)+ plot_annotation(tag_levels = 'a')
#查看结果
c
参考文献
[1] https://zhuanlan.zhihu.com/p/340207465
[2] Feng, J. G., Zhu, B., 2021. Global patterns and associated drivers of priming effect in response to nutrient addition. Soil Biology and Biochemistry 153, 108118. https://doi.org/10.1016/j.soilbio.2020.108118.