森林图是以统计指标和统计分析方法为基础,用数值运算结果绘制出的图型。它在平面直角坐标系中,以一条垂直的无效线(横坐标刻度为1 或0) 为中心,用平行于横轴的多条线段描述了每个被纳入研究的效应量和可信区间(CI),用一个棱形(或其它图形) 描述了多个研究合并的效应量及可信区间。它非常简单和直观地描述了Meta 分析的统计结果,是Meta 分析中最常用的结果表达形式。

今天就来学习一个非常不错的绘制森林图的R包——forestploter包。
1. 安装和加载R包
安装可以直接从CRAN上安装。
install.packages("forestploter")
library(forestploter)
2. 加载示例数据
示例数据使用前面森林图推文的数据,在公众号后台回复森林图数据
免费获取,格式如下图所示。

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

3. 数据处理
简单处理下数据格式,比如组别前面添加空格。
dt$Subgroups <- ifelse(is.na(dt$HR),
dt$Subgroups,
paste0(" ", dt$Subgroups))

然后再创建一列空列,用来后面存放森林图的图形部分。
dt$` ` <- paste(rep(" ", 20), collapse = " ")

正常需要在图形显示数据的文本部分,这里可以使用代码实现,也可以提前在Excel中填好。
dt$`HR (95% CI)` <- ifelse(is.na(dt$HR), "",
sprintf("%.2f (%.2f to %.2f)",
dt$HR, dt$LowerCI, dt$UpperCI))

4. 绘制图形
下面可以使用forest()函数来简单绘制图形。
首先选中需要在图上显示的列别,这里只需要数据框中的第1,5,6列,2,3,4列用来绘制图形部分。
然后使用ci_column参数指定图形部分存放的位置。
plot <- forest(dt[, c(1, 5, 6)],
est = dt$HR,
lower = dt$LowerCI,
upper = dt$UpperCI,
ci_column = 2)
plot

如上就绘制好了简单的森林图。
5. 自定义森林图参数
这个包还有丰富的参数来调整图形美化。
5.1 添加参考线
可以使用ref_line来绘制参考线,也就是X轴上的零线,默认位置是1,可以设置其他参数调整位置。
plot <- forest(dt[, c(1, 5, 6)],
est = dt$HR,
lower = dt$LowerCI,
upper = dt$UpperCI,
ci_column = 2,
ref_line = 2)
plot

5.2 添加轴标题和脚注
可以使用arrow_lab参数和footnote参数来添加轴标题和脚注。
plot <- forest(dt[, c(1, 5, 6)],
est = dt$HR,
lower = dt$LowerCI,
upper = dt$UpperCI,
ci_column = 2,
ref_line = 2,
arrow_lab = c("Placebo Better", "Treatment Better"),
footnote = "This is the demo data.")
plot

5.3 设置轴范围和刻度位置
可以使用xlim参数设置坐标轴的限制范围,设置ticks_at参数设置坐标轴的刻度位置。
plot <- forest(dt[, c(1, 5, 6)],
est = dt$HR,
lower = dt$LowerCI,
upper = dt$UpperCI,
ci_column = 2,
ref_line = 2,
arrow_lab = c("Placebo Better", "Treatment Better"),
footnote = "This is the demo data.",
xlim = c(0, 3),
ticks_at = c(0, 1, 2, 3))
plot

5.4 设置图形主题
这个函数还有专门的图形主题函数——forest_theme()函数,用来美化图形。
主要可设置图形部分包括:字体大小、字体簇、置信区间的美化、坐标轴、参考线、脚注等内容。
forest_theme(base_size = 12, base_family = "",
ci_pch = 15, ci_col = "black", ci_lty = 1, ci_lwd = 1, ci_Theight = NULL,
legend_name = "Group", legend_position = "right", legend_value = "",
xaxis_lwd = 0.6, xaxis_cex = 1,
refline_lwd = 1, refline_lty = "dashed", refline_col = "grey20",
vertline_lwd = 1, vertline_lty = "dashed", vertline_col = "grey20",
summary_fill = "#4575b4", summary_col = "#4575b4",
footnote_cex = 0.6, footnote_fontface = "plain", footnote_col = "black",
...
)
可以将设置好的主题函数传递给对象,然后在forest()函数中使用。
tm <- forest_theme(base_size = 10,
refline_col = "red",
footnote_col = "#636363",
footnote_fontface = "italic")
plot <- forest(dt[, c(1, 5, 6)],
est = dt$HR,
lower = dt$LowerCI,
upper = dt$UpperCI,
ci_column = 2,
ref_line = 2,
arrow_lab = c("Placebo Better", "Treatment Better"),
footnote = "This is the demo data.",
xlim = c(0, 3),
ticks_at = c(0, 1, 2, 3),
theme = tm)

5.5 其他函数
使用前面的参数基本就可以绘制一个很漂亮的森林图了,但是还有其他函数用来局部调整图形。
可以使用add_text函数用来在绘制好的森林图的添加文字,使用add_underline 函数用来在森林图的第一行添加水平粗线。
forest(dt[, c(1, 5, 6)],
est = dt$HR,
lower = dt$LowerCI,
upper = dt$UpperCI,
ci_column = 2,
ref_line = 2,
arrow_lab = c("Placebo Better", "Treatment Better"),
footnote = "This is the demo data.",
xlim = c(0, 3),
ticks_at = c(0, 1, 2, 3),
theme = tm)
add_underline(plot, row = NULL, col = NULL, part = "header")

参考资料
forestploter帮助文档
关注下方公众号,分享更多更好玩的R语言知识。
如果需要进群,请在菜单栏处添加作者微信,添加入群。
往期精品(点击图片直达文字对应教程)
后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集