楼主: 段湘杰
8271 1

[学习分享] R语言统计与绘图:绘制合并置信区间的森林图 [推广有奖]

  • 0关注
  • 1粉丝

本科生

24%

还不是VIP/贵宾

-

威望
0
论坛币
322 个
通用积分
31.4422
学术水平
15 点
热心指数
15 点
信用等级
15 点
经验
170 点
帖子
23
精华
0
在线时间
111 小时
注册时间
2018-6-15
最后登录
2023-6-25

楼主
段湘杰 学生认证  发表于 2020-6-7 00:39:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

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

今天来学习在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")))
           # 设置图例位置和大小

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


二维码

扫码加我 拉你入群

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

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

关键词:语言统计 置信区间 R语言 森林图 Packages

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 3 + 3 + 3 鼓励积极发帖讨论
dxystata + 100 + 10 鼓励积极发帖讨论

总评分: 经验 + 100  论坛币 + 10  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

公众号:R语言统计与绘图。

沙发
热爱编码的秃头女孩 发表于 2020-10-21 19:06:54
请问,如何进行置信区间之间的颜色填充呢?比如0.8-1.2之间的区间进行颜色填充

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-28 15:28