森林图在论文中很常见,多用于表示多因素分析中的变量与结果变量的比值效应,可以用图示的方法比较直观的绘制出来。既往我们在文章《R语言快速绘制多因素回归分析森林图(1)》《R语言使用forestploter包绘制单组及双组森林图(2)(附有超详细备注)》已经介绍了怎么绘制森林图,今天继续介绍forestplot包绘制森林图,forestplot包的特点是简单易上手,不容易出错。
下面我们进入正题,先导入数据和R包

library(forestplot)
dt<-read.csv("E:/r/test/forest2.csv",sep=',',header=TRUE)

R语言forestplot包绘制森林图-编程知识网
这是一个森林图数据(公众号回复:森林图数据2,可以获得数据)这个数据,
前几个变量我解释一下Subgroup:分组,就是的组别和亚组,Treatment:治疗组例数,Placebo:使用安慰剂,也就是对照组的例数。Est:效应值,可以是OR或者HR,low:效应值的最低值,可以认为是可信区间的下限,hi:效应值的最高值,可以认为是可信区间的上限。
我们先来画一个最基础的森林图,后面的几个数据暂时不需要,我们先精简一下数据

dt <- dt[,1:6]
View(dt)

R语言forestplot包绘制森林图-编程知识网
假设我们想把1—3列数据进行绘制森林图,得到数据后不能直接绘图,要把数据预处理一下,变成需要的绘图的矩阵格式,这里介绍2种方法。
第一种方法:

tabletext1<- cbind(c("Subgroup","\n",dt$Subgroup), c("Treatment","\n",dt$Treatment), c("Placebo","\n",dt$Placebo),c("est","\n",dt$est),c("low","\n",dt$low),c("hi","\n",dt$hi))

R语言forestplot包绘制森林图-编程知识网
这样就生成一个绘图的矩阵了,但这里要注意一下,第二行是空的,什么都没有,要把第二行删除掉,不然会报错。

tabletext1<-tabletext1[-2,]

R语言forestplot包绘制森林图-编程知识网
删除掉后表格紧凑了一点,就可以直接绘图了,这里要注意一下,mean,lower,upper要的是dt,也就是原数据。graph.pos就是图片位置,你想选第几行绘图就填几,我这里填最右边

forestplot(labeltext=tabletext1[,1:3],graph.pos="right", mean=c(NA,dt$est),lower=c(NA,dt$low),upper=c(NA,dt$hi),graphwidth = unit(60,"mm"),#设置图片位置和宽度boxsize =0.2,line.margin = unit(5,"mm"),#对散点和线条进行设置lineheight = unit(5,"mm"),#设置图形行距col=fpColors(box = "grey0",lines = "grey0",summary = "grey0"),colgap = unit(1,"mm"),#图形列间距zero = 1,#参照值xticks = c(0,1,2))#X轴的定义标签

R语言forestplot包绘制森林图-编程知识网
这样一个简单美观的森林图就绘制好了,下面介绍第二种方法,直接选行数生成矩阵,我觉得这样简单一点

dt1<-as.matrix(dt[,1:3])

R语言forestplot包绘制森林图-编程知识网
但这个格式没有第一列,我们还要需要加一下

dt1 <- rbind(c(NA, "Treatment","Placebo"),dt1)

R语言forestplot包绘制森林图-编程知识网
加上去以后就可以绘图了,基本和第一种方法一样

forestplot(labeltext=dt1,graph.pos="right", mean=c(NA,dt$est),lower=c(NA,dt$low),upper=c(NA,dt$hi),graphwidth = unit(60,"mm"),#设置图片位置和宽度boxsize =0.2,line.margin = unit(5,"mm"),#对散点和线条进行设置lineheight = unit(5,"mm"),#设置图形行距col=fpColors(box = "grey0",lines = "grey0",summary = "grey0"),colgap = unit(1,"mm"),#图形列间距zero = 1,#参照值xticks = c(0,1,2))#X轴的定义标签

R语言forestplot包绘制森林图-编程知识网
我们还可以对图片的一些细节进行修改,修改图片位置

forestplot(labeltext=dt1,graph.pos=2, mean=c(NA,dt$est),lower=c(NA,dt$low),upper=c(NA,dt$hi),graphwidth = unit(60,"mm"),#设置图片位置和宽度boxsize =0.2,line.margin = unit(5,"mm"),#对散点和线条进行设置lineheight = unit(5,"mm"),#设置图形行距col=fpColors(box = "grey0",lines = "grey0",summary = "grey0"),colgap = unit(1,"mm"),#图形列间距zero = 1,#参照值xticks = c(0,1,2))#X轴的定义标签

R语言forestplot包绘制森林图-编程知识网
更改图片宽度

forestplot(labeltext=dt1,graph.pos=2, mean=c(NA,dt$est),lower=c(NA,dt$low),upper=c(NA,dt$hi),graphwidth = unit(40,"mm"),#设置图片位置和宽度boxsize =0.2,line.margin = unit(5,"mm"),#对散点和线条进行设置lineheight = unit(5,"mm"),#设置图形行距col=fpColors(box = "grey0",lines = "grey0",summary = "grey0"),colgap = unit(1,"mm"),#图形列间距zero = 1,#参照值xticks = c(0,1,2))#X轴的定义标签

R语言forestplot包绘制森林图-编程知识网
更改线条和方块颜色

forestplot(labeltext=dt1,graph.pos=2, mean=c(NA,dt$est),lower=c(NA,dt$low),upper=c(NA,dt$hi),graphwidth = unit(40,"mm"),#设置图片位置和宽度boxsize =0.2,line.margin = unit(5,"mm"),#对散点和线条进行设置lineheight = unit(5,"mm"),#设置图形行距col=fpColors(box = "blue",lines = "red",summary = "grey0"),colgap = unit(1,"mm"),#图形列间距zero = 1,#参照值xticks = c(0,1,2))#X轴的定义标签

R语言forestplot包绘制森林图-编程知识网
为X轴添加标签

forestplot(labeltext=dt1,graph.pos=2, mean=c(NA,dt$est),lower=c(NA,dt$low),upper=c(NA,dt$hi),graphwidth = unit(40,"mm"),#设置图片位置和宽度boxsize =0.2,line.margin = unit(5,"mm"),#对散点和线条进行设置lineheight = unit(5,"mm"),#设置图形行距col=fpColors(box = "blue",lines = "red",summary = "grey0"),colgap = unit(1,"mm"),#图形列间距zero = 1,#参照值xlab="X轴的标签",xticks = c(-1,0,1))#X轴的定义

R语言forestplot包绘制森林图-编程知识网
还有许多调整,我这里就不弄了,大家自己摸索把。