今天来学习下复杂点的森林图绘制,如下图所示,同一变量不同人群的置信区间合并在一起。

今天来学习在R中怎么绘制上面这种森林图。
1. 安装和加载R包
forestplot包是基于rme ta包的forestplot函数创建的,但是功能更强大,可以对同一标签添加多个置信区间。
install.packages("forestplot")
library(forestplot)
2. 读取数据
以上图的数据为例,将数据录入到Excel中(示例数据在文末获取),录入数据格式如下图所示:

library(readxl)
forest <- read_excel("forest.xlsx")
View(forest)

3. 数据处理
3.1 定义亚组
在论文图片中,为了区分以及显示的更清楚,亚组一般会向前缩进两个空格。
subgps <- c(7,8,9,12,13,14,17,18,19,22,23,24)
forest$Variable[subgps] <- paste(" ",forest$Variable[subgps])
View(forest)

3.2 转换数据格式
attach(forest)
labeltext <- as.matrix(forest[,1:3])
3.3 指定图形数据
分别指定哪些数据是HR、CI上限、CI下限。
coef <- with(forest, cbind(coef1, coef2))
low <- with(forest, cbind(low1, low2))
high <- with(forest, cbind(high1, high2))
4. 绘制简单图形
forestplot(labeltext,
mean = coef,
lower = low,
upper = high)

与原图相比,需要修改的地方有很多:
- 修改坐标轴标签
- 添加无效线
- 添加水平线
- 调整box大小
- 字体对齐
- 图形元素的位置
- 图形元素的颜色
- 修改坐标轴刻度
- 添加图例
前面的推文已经介绍了森林图各种参数的调整,因此就直接修改了。
5. 自定义森林图参数
修改坐标轴标签、添加无效线、水平线、调整box大小、字体对齐、图形元素等直接一起修改啦。
my_xticks <- c(0.004,0.04,0.2,1,5,25,250)
attr(my_xticks, "labels") <- xticks
forestplot(labeltext,
mean = coef,
lower = low,
upper = high,
zero = 1, lwd.zero = 2,
graph.pos = 2,
boxsize = 0.5,
align = "l",
xlog = TRUE,
xlab="Mortality",
xticks = my_xticks,
hrzl_lines = list("2" = gpar(lty=1, columns=c(3:4), col = "black"),
"3" = gpar(lty=1, columns=c(1:4), col = "black")),
is.summary= c(T,F,T,F,T,F,F,F,F,T,F,F,F,F,T,F,F,F,F,T,F,F,F,F),
txt_gp = fpTxtGp(label = gpar(cex = 1.15),
ticks = gpar(cex = 1.20),
xlab = gpar(cex = 1.45)),
col=fpColors(box=c("#B30638", "#00549E")),
legend=c("No-AKI", "AKI"),
legend_args = fpLegend(pos = list(x =0.20, y=0.05),
r = unit(.1, "snpc")))

如上所示为绘制的森林图,与论文原图基本是一致的。