如何用forestploter绘制含4个并列处理组的森林图?
解决方案:用forestploter实现4个处理组并排的森林图
以下是修改后的完整代码,可直接运行生成4列处理组的森林图:
# 安装并加载包 install.packages("forestploter") library(forestploter) # 读取示例数据 dt <- read.csv(system.file("extdata", "example_data.csv", package = "forestploter")) # 子组缩进处理 dt$Subgroup <- ifelse(is.na(dt$Placebo), dt$Subgroup, paste0(" ", dt$Subgroup)) # NA值替换为空白 dt$`n` <- ifelse(is.na(dt$Treatment), "", dt$Treatment) dt$`n ` <- ifelse(is.na(dt$Placebo), "", dt$Placebo) # 关键修改1:添加4个空白列,对应4个处理组的CI展示 dt$`Trt 1 Outcome` <- paste(rep(" ", 20), collapse = " ") dt$`Trt 2 Outcome` <- paste(rep(" ", 20), collapse = " ") dt$`Trt 3 Outcome` <- paste(rep(" ", 20), collapse = " ") dt$`Trt 4 Outcome` <- paste(rep(" ", 20), collapse = " ") # 关键修改2:更新主题,适配4个处理组 tm <- forest_theme(base_size = 10, refline_lty = "solid", ci_pch = c(15, 18, 17, 19), # 4种不同的点形状 ci_col = c("#377eb8", "#4daf4a", "#984ea3", "#ff7f00"), # 4种不同颜色 footnote_col = "blue", legend_name = "Group", legend_value = c("Trt 1", "Trt 2", "Trt 3", "Trt 4"), # 4个组的名称 vertline_lty = c("dashed", "dotted"), vertline_col = c("#d6604d", "#bababa")) # 关键修改3:调整列选择和ci_column参数,指定4个CI列的位置 p <- forest(dt[,c(1, 19, 20, 21, 22, 23)], # 包含Subgroup、n、4个CI列、n est = list(dt$est_gp1, dt$est_gp2, dt$est_gp3, dt$est_gp4), lower = list(dt$low_gp1, dt$low_gp2, dt$low_gp3, dt$low_gp4), upper = list(dt$hi_gp1, dt$hi_gp2, dt$hi_gp3, dt$hi_gp4), ci_column = c(3,4,5,6), # 指定4个CI列的索引位置 ref_line = 1, vert_line = c(0.5, 2), nudge_y = 0.2, theme = tm) # 生成图形 plot(p)
关键修改说明:
- 添加4个空白列:原代码仅添加2个CI展示列,现在新增为4个,每个列对应一个处理组的置信区间。
- 主题适配4组:调整
ci_pch(点形状)、ci_col(点颜色)、legend_value(图例名称)为4个元素,确保每个处理组有独特视觉标识。 - 指定CI列位置:
ci_column参数从c(3,5)修改为c(3,4,5,6),对应新增的4个空白列位置,让每个处理组的CI匹配到正确列。 - 列选择调整:在
dt[,c(1,19,20,21,22,23)]中包含4个CI列,确保森林图列布局正确。
内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai
相关产品推荐
相关产品推荐

