全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
8070 1
2020-06-07

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

今天来学习在R中怎么绘制上面这种森林图。

1. 安装和加载R包

forestplot包是基于rme ta包的forestplot函数创建的,但是功能更强大,可以对同一标签添加多个置信区间。

install.packages("forestplot")  #安装forestplot包 
library(forestplot)  # 加载包 

2. 读取数据

以上图的数据为例,将数据录入到Excel中(示例数据在文末获取),录入数据格式如下图所示:

library(readxl) # 使用RStudio软件的导入数据功能 
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]) 
# 将forest数据框的前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, # 图形元素中HR部分
           lower = low,  # 图形元素中置信区间下限
           upper = high) # 图形元素中置信区间上限

与原图相比,需要修改的地方有很多:

  1. 修改坐标轴标签
  2. 添加无效线
  3. 添加水平线
  4. 调整box大小
  5. 字体对齐
  6. 图形元素的位置
  7. 图形元素的颜色
  8. 修改坐标轴刻度
  9. 添加图例

前面的推文已经介绍了森林图各种参数的调整,因此就直接修改了。

5. 自定义森林图参数

修改坐标轴标签、添加无效线、水平线、调整box大小、字体对齐、图形元素等直接一起修改啦。

my_xticks <- c(0.004,0.04,0.2,1,5,25,250) # 设置需要显示的x轴刻度 
attr(my_xticks, "labels") <- xticks # 将x轴刻度标签传递给xticks参数

forestplot(labeltext, # 森林图文本部分
           mean = coef, # 图形元素中HR部分
           lower = low, # 图形元素中置信区间下限
           upper = high, # 图形元素中置信区间上限
           zero = 1, lwd.zero = 2, # 设置无效线位置和线条宽度
           graph.pos = 2, # 设置图形元素的位置
           boxsize = 0.5, # 设置box的大小
           align = "l", # 设置字体对齐方式
           xlog = TRUE,  # 设置对数坐标轴
           xlab="Mortality", # 添加x轴标签
           xticks = my_xticks, # 添加x轴刻度
           hrzl_lines = list("2" = gpar(lty=1, columns=c(3:4), col = "black"),
                             "3" = gpar(lty=1, columns=c(1:4), col = "black")),
           # 在第2行和第3行添加水平线,并设置水平线的线型、宽度和颜色 
           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),
           # 指定哪些行是summary行
           txt_gp = fpTxtGp(label = gpar(cex = 1.15), # 设置文本字体大小 
                            ticks = gpar(cex = 1.20), # 设置坐标轴刻度大小
                            xlab = gpar(cex = 1.45)), # 设置坐标轴标题大小
           # 设置文本标签、刻度、x轴标签的大小
           col=fpColors(box=c("#B30638", "#00549E")),
           # 设置box的颜色
           legend=c("No-AKI", "AKI"), # 设置图例           
           legend_args = fpLegend(pos = list(x =0.20, y=0.05),
                                  r = unit(.1, "snpc")))
           # 设置图例位置和大小

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


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-10-21 19:06:54
请问,如何进行置信区间之间的颜色填充呢?比如0.8-1.2之间的区间进行颜色填充
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群