如何基于协变量调整前后的logistic回归结果绘制森林图
R语言ggplot2拆分协变量调整前后森林图的方法
预处理注意事项
- 先统一治疗方案命名:原始数据中调整后的组4有小写的
c,先统一改为大写C,避免被识别为不同治疗方案 - 修正列名匹配:原有代码里CI的列名写为
Low.CI和Up.CI,和原始数据的Low_CI、High_CI不一致,需要先对齐
修改后的完整代码
# 加载所需包 library(tidyverse) # 预处理数据 data <- data %>% mutate(Treatment = str_to_upper(Treatment), # 统一治疗名大小写 Sortnum = nrow(data) - as.numeric(rownames(data)), Label = fct_reorder(Treatment, Sortnum)) # 绘图代码 ggplot(data, aes(x=Label, y=OR, color = factor(Group))) + geom_point(size=3) + # 放大点方便识别 coord_flip() + # 修正CI列名匹配原始数据 geom_errorbar(aes(ymin=Low_CI, ymax=High_CI), width=0.2, linewidth=1, color = 'gray50')+ ylab("OR(95% Confidence Interval)")+ geom_hline(yintercept =1, linetype=2)+ # 核心修改:按调整状态分面,调整前后完全拆分,也可以写成Adjustment~. 仅按调整状态分面 facet_grid(Group~Adjustment, scales = "free_y", space = "free_y") + scale_y_log10(breaks=c(0.2,0.4,0.6,0.8,1.0,1.2,1.4, 1.6, 2.0, 2.4), position="left",limits=c(0.2,2.5))+ theme(panel.background = element_blank(), axis.line = element_line(colour = "black"), axis.title=element_text(size=20), text = element_text(size=18), axis.title.y=element_blank(), axis.text.x = element_text(colour="grey20",size=16), axis.text.y = element_text(colour="black",size=20), legend.position=c(0.25, 0.2), legend.title=element_blank(), legend.text = element_text(size=16), legend.background = element_rect(color = "black",fill = "white", size = 0.3, linetype = "solid"), # 美化分面标签,明确标识调整前后 strip.text = element_text(size=16, face="bold"), strip.background = element_rect(fill="lightgray", color="black") )
核心修改说明
- 移除了原代码中多余的
geom_line:森林图不需要连线,不同治疗方案是独立指标,连线是造成不同结果混淆、出现无意义合并线条的核心原因 - 调整分面规则:将原来仅按研究组
Group分面,改为同时按调整状态Adjustment分面,系统会自动将调整前、调整后的结果拆分为独立的展示区域,完全不会混淆 - 如果需要生成两张完全独立的调整前、调整后森林图,仅需要用
filter(Adjustment == "Before")和filter(Adjustment == "After")拆分数据后分别运行绘图代码即可
内容的提问来源于stack exchange,提问作者Sana
相关产品推荐
相关产品推荐

