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

能否为dwplot手动设置颜色,按系数显著性与正负跨模型着色?

可行,具体实现步骤如下

dwplot本质是基于ggplot2的绘图函数,完全可以自定义颜色映射来实现你需要的效果,具体操作分两种方式:

方式一:修改已生成的dwplot对象

如果你已经用p <- dwplot(list(mod1976,mod1980,mod1984))生成了绘图对象,可以直接提取其数据并添加颜色分组:

library(dplyr)
library(ggplot2)

# 提取绘图数据
plot_data <- p$data

# 添加颜色分组变量:根据系数正负和显著性(以p<0.05为例)
plot_data <- plot_data %>%
  mutate(
    color_group = case_when(
      estimate > 0 & p.value < 0.05 ~ "正且显著",
      estimate < 0 & p.value < 0.05 ~ "负且显著",
      TRUE ~ "不显著"
    )
  )

# 修改原绘图的颜色映射
p_updated <- p +
  aes(color = color_group) +
  scale_color_manual(
    values = c("正且显著" = "green", "负且显著" = "red", "不显著" = "gray"),
    name = "系数状态"
  )

# 查看修改后的图
print(p_updated)

方式二:手动整理数据后绘图(更灵活)

如果你希望从源头控制数据,可以先提取所有模型的系数和显著性信息,再传入dwplot:

library(dotwhisker)
library(broom)
library(dplyr)

# 提取每个模型的系数、p值,并添加年份标识
tidy_1976 <- tidy(mod1976) %>% mutate(model_year = 1976)
tidy_1980 <- tidy(mod1980) %>% mutate(model_year = 1980)
tidy_1984 <- tidy(mod1984) %>% mutate(model_year = 1984)

# 合并所有模型数据
combined_tidy <- bind_rows(tidy_1976, tidy_1980, tidy_1984)

# 创建颜色分组变量
combined_tidy <- combined_tidy %>%
  mutate(
    color_group = case_when(
      estimate > 0 & p.value < 0.05 ~ "正且显著",
      estimate < 0 & p.value < 0.05 ~ "负且显著",
      TRUE ~ "不显著"
    )
  )

# 用dwplot绘图,指定颜色映射
dwplot(combined_tidy, x = "estimate", y = "term", color = "color_group") +
  scale_color_manual(
    values = c("正且显著" = "green", "负且显著" = "red", "不显著" = "gray"),
    name = "系数状态"
  ) +
  facet_wrap(~model_year)  # 可选:按年份分面展示不同模型

注意事项

  • 确保你的模型对象能被broom::tidy()正确提取p值,如果是特殊模型(如生存分析模型),可能需要调整tidy()的参数(比如exponentiate = FALSE)。
  • 你可以根据需求调整显著性阈值(比如把p.value < 0.05改成p.value < 0.01)。

内容的提问来源于stack exchange,提问作者michael joseph

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:13:16