You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:35:19