7e99c2e7d195bd1d48b3144b6bae5c3c.png

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

7bfa015119aadc564cd39317f824ccef.png

今天就来学习一个非常不错的绘制森林图的R包——forestploter包。

1. 安装和加载R包

安装可以直接从CRAN上安装。

install.packages("forestploter")
library(forestploter)

2. 加载示例数据

示例数据使用前面森林图推文的数据,在公众号后台回复森林图数据免费获取,格式如下图所示。

635e7f1dcf55b308c58397e104fef1cc.png
library(readxl)
dt <- read_excel("forest.xlsx")
ebc4b7ef3f91222a99db4df2c277297b.png

3. 数据处理

简单处理下数据格式,比如组别前面添加空格。

dt$Subgroups <- ifelse(is.na(dt$HR),
                       dt$Subgroups,
                       paste0("      ", dt$Subgroups))
f44a4acefae50bb59f3537e1c8d0e3b1.png

然后再创建一列空列,用来后面存放森林图的图形部分。

dt$` ` <- paste(rep(" ", 20), collapse = " ")
b29e5441a16f5b8f00c4c84af568426d.png

正常需要在图形显示数据的文本部分,这里可以使用代码实现,也可以提前在Excel中填好。

dt$`HR (95% CI)` <- ifelse(is.na(dt$HR), "",
                           sprintf("%.2f (%.2f to %.2f)",
                                   dt$HR, dt$LowerCI, dt$UpperCI))
fed2631b87ed339627fbe992ba485a1b.png

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
0de66ecf65ef1b6dd4e77c8b1236d181.png

如上就绘制好了简单的森林图。

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
c7106c629eba6f51d3fa60b4b857cb38.png

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
046eff18e1fb3d843f9c97039da57fa0.png

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
a34ba2bc7768855026e8318558bd2c00.png

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)
f6ee0d572d1a16eb677fbb48c638ffd1.png

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")
ed90fc4c5ea2beb5d6712bcf3bb4ab92.png
参考资料
  1. forestploter帮助文档


关注下方公众号,分享更多更好玩的R语言知识。
如果需要进群,请在菜单栏处添加作者微信,添加入群。

往期精品(点击图片直达文字对应教程)

71aad621f42ff3f0ed39918cb0d1e35f.png

76e7a034fbf5a9970dc7bd6be57dcaec.png

1bf5a605406ba8e5ab53f251b83f13eb.png

d78dd3b4154113b610c716a3c3ec6b2f.png

fb7c1dcd8039e06f84874584ad2e66a7.png

bfeab87d92453b8d945f629619b3cf67.png

a1ccbec5f5d0248b292cf865d5077b7a.png

3b8efbcc5eb96d4b20db6c5d89e7b220.png

5dc123df88b53089a4c78c99f5339914.png

2b8ab35b125d643af1eda14ece18cb59.png

3d9050c4a6cdca5d90f87912dd8a2e86.png

407f8183a8e5f9fbc2957d4c508488eb.png

43b1b7381954abc3821d1ae53fd06b63.png

bebe608aa96898ca9da6e4d1f24043a7.png

d3298f0bc35b00698de98bf38a16ff36.png

c25ad90cbfb9b258f6a576b5497bb1c9.png

c8c76e4c7900612f8d563451529a17eb.png

dfbbe5095ffb335d42dd56374c17508f.png

09576855a07e1d9d6e1ce61f17210f9d.png

c840c07043c224738c4f251348296457.png

cd378dbb73edaf8ca27b27446cd538b8.png

e20cc22d981ab5e30365e42aea7e51bb.png

0f2cd5dd181466242a14dcf75a116f01.png

63f4258829f1a7255ee22702075b50b8.png

1a3bf6faa366d87076fabf65a8ff4cc5.png

9efa4e776368d0faccf20f69f94694f7.png

bde388f2bbb30b799c36143f73f489c1.png

0beedf96606f1ab0257e19865a5cfc38.png

机器学习

后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集

005f8d1902f71608fa8a262d6684cc04.png

eaa0d5c385ff40a73d2b79021d923022.png

913680605e4e04c63267e8d0755d252f.png

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐