R海拾遗-森林图绘制

2020-09-15 12:33:54 浏览数 (2)

森林图绘制

概述

使用forestplot包进行绘制

包的安装

代码语言:javascript复制
install.packages("forestplot")
# 调用
library(forestplot)

简单示例

生成数据

代码语言:javascript复制
library(forestplot)
# 生成数据
cochrane_from_rmeta <- 
  structure(list(
    mean  = c(NA, NA, 0.578, 0.165, 0.246, 0.700, 0.348, 0.139, 1.017, NA, 0.531), 
    lower = c(NA, NA, 0.372, 0.018, 0.072, 0.333, 0.083, 0.016, 0.365, NA, 0.386),
    upper = c(NA, NA, 0.898, 1.517, 0.833, 1.474, 1.455, 1.209, 2.831, NA, 0.731)),
    .Names = c("mean", "lower", "upper"), 
    row.names = c(NA, -11L), 
    class = "data.frame")
tabletext<-cbind(
  c("", "Study", "Auckland", "Block", 
    "Doran", "Gamsu", "Morrison", "Papageorgiou", 
    "Tauesch", NA, "Summary"),
  c("Deaths", "(steroid)", "36", "1", 
    "4", "14", "3", "1", 
    "8", NA, NA),
  c("Deaths", "(placebo)", "60", "5", 
    "11", "20", "7", "7", 
    "10", NA, NA),
  c("", "OR", "0.58", "0.16", 
    "0.25", "0.70", "0.35", "0.14", 
    "1.02", NA, "0.53"))

结果

这里生成的是一个11行3列的数据框,分别对应均值,上限和下限 第一行和第二行为空值,为了提供绘图中的空行

tabletext是生成一个11行4列的数据框,目的是提供绘图的文字信息

进行绘图

首先进行简单的绘图

代码语言:javascript复制
forestplot(tabletext, 
           cochrane_from_rmeta,new_page = TRUE,
           is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE),
           clip=c(0.1,2.5), 
           xlog=TRUE, 
           col=fpColors(box="royalblue",line="darkblue", summary="royalblue"))

可以看出文本信息和绘图信息分别的对应列数

添加一条水平线

代码语言:javascript复制
forestplot(tabletext, 
           hrzl_lines = gpar(col="#444444"),
           cochrane_from_rmeta,new_page = TRUE,
           is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE),
           clip=c(0.1,2.5), 
           xlog=TRUE,
           col=fpColors(box="royalblue",line="darkblue", summary="royalblue"))

水平线的目的使得标题和内容能够更加明显的方式区分,同时也也可对水平线进行一定的编辑,如下代码

代码语言:javascript复制
forestplot(tabletext, 
           hrzl_lines = list("3" = gpar(lty=2), 
                             "11" = gpar(lwd=1, columns=1:4, col = "#000044")),
           cochrane_from_rmeta,new_page = TRUE,
           is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE),
           clip=c(0.1,2.5), 
           xlog=TRUE,
           col=fpColors(box="royalblue",line="darkblue", summary="royalblue", hrz_lines = "#444444"))

这里的hrzl_lines是一个列表,分别对第三行,第11行1:4列进行添加水平线

添加置信区间的尾巴,也就是短竖线,使用 vertices = TRUE

代码语言:javascript复制
forestplot(tabletext, 
           hrzl_lines = list("3" = gpar(lty=2), 
                             "11" = gpar(lwd=1, columns=1:4, col = "#000044")),
           cochrane_from_rmeta,new_page = TRUE,
           is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE),
           clip=c(0.1,2.5), 
           xlog=TRUE,
           col=fpColors(box="royalblue",line="darkblue", summary="royalblue", hrz_lines = "#444444"),
           vertices = TRUE)

可以从图中明显的看到一个短的竖线在置信区间的两侧

使用graph.pos指定画图的位置,这里的例子显示的是4,也就是在第四列对图形进行绘制

代码语言:javascript复制
forestplot(tabletext, 
           graph.pos = 4,
           hrzl_lines = list("3" = gpar(lty=2), 
                             "11" = gpar(lwd=1, columns=c(1:3,5), col = "#000044"),
                             "12" = gpar(lwd=1, lty=2, columns=c(1:3,5), col = "#000044")),
           cochrane_from_rmeta,new_page = TRUE,
           is.summary=c(TRUE,TRUE,rep(FALSE,8),TRUE),
           clip=c(0.1,2.5), 
           xlog=TRUE,
           col=fpColors(box="royalblue",line="darkblue", summary="royalblue", hrz_lines = "#444444"))

在这个图中,绘图的区域位于第四行,同时OR值被安排在了第5行的位置

结束语

对于森林图的绘制,总体来说是比较简单的,里面的各个参数的意思也不用太过了解,比如对于绘图颜色的控制,对字体的控制等,这些内容可以在r语言的官方文档中都可以查询,用到的时候去查询较为合适。

peace & love

0 人点赞