如何用dwplot按OR系数大小设置sjPlot Set1配色的系数图?
解决方案:用dwplot制作sjPlot风格OR系数图
问题分析
你的代码存在两个核心问题:
- 误用了
scale_fill_manual:你给点和线段设置的是colour映射,应该用scale_color_manual而非填充色设置。 - 重复绘制图层:
dwplot本身已经生成了系数点和置信区间线段,额外叠加的geom_segment和geom_point会导致图层冲突,颜色逻辑混乱。
修正后的代码
# 加载你的数据(替换为实际加载mydf的代码) # mydf <- readRDS(...) library(ggplot2) library(dotwhisker) # 初始化dwplot绘图对象 p <- dwplot(mydf, vline = geom_vline(xintercept = 1, colour = "grey90", linetype = 1, size = 1)) + theme_classic() + theme(legend.position = "none", plot.title = element_text(hjust = 0.5, face = "bold")) + xlab("Odds ratio") + # 针对colour映射设置目标颜色 scale_color_manual(values = c("#E41A1C", "#377EB8")) # 修改dwplot默认图层的颜色映射逻辑 p$layers[[1]]$aes <- aes(x = estimate, y = term, colour = estimate > 1) p$layers[[2]]$aes <- aes(x = conf.low, xend = conf.high, y = term, yend = term, colour = estimate > 1) print(p)
代码说明
- 修正原代码中
dwplot(df,...)的笔误,统一使用数据对象mydf。 - 替换
scale_fill_manual为scale_color_manual,匹配点和线段的colour映射需求。 - 直接修改
dwplot生成的前两个图层(分别对应系数点、置信区间线段)的映射规则,将颜色绑定到estimate > 1的判断逻辑,避免重复绘制图层引发的冲突。 - 颜色严格匹配需求:
estimate ≤1时使用#E41A1C,estimate>1时使用#377EB8。
内容的提问来源于stack exchange,提问作者Chris T.
相关产品推荐
相关产品推荐

