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

如何制作带标准化系数可视化的多模型表格(含p值处理)

解决方案:用gt+ggplot2实现系数可视化表格

核心思路

利用gt的自定义单元格渲染能力,结合ggplot2绘制对应大小和深浅的圆点,同时根据p值过滤不显著的单元格,完美匹配你要的corrplot风格效果。

步骤与代码示例

1. 匹配你的数据结构(模拟modelsummary输出)

假设你已经用modelsummary提取了系数和p值,这里模拟同结构的数据方便演示:

library(dplyr)
library(modelsummary)
library(gt)
library(ggplot2)
library(purrr)

# 模拟3个模型的标准化系数与p值
set.seed(123)
model_raw <- tibble(
  term = rep(c("Var1", "Var2", "Var3", "Var4"), 3),
  model = rep(c("Model 1", "Model 2", "Model 3"), each = 4),
  std_coef = c(rnorm(3, 0.2, 0.1), rnorm(1, 0.02, 0.01),
               rnorm(2, -0.3, 0.15), rnorm(2, 0.05, 0.03),
               rnorm(4, 0.15, 0.08)),
  p_value = c(runif(3, 0.01, 0.04), runif(1, 0.6, 0.8),
              runif(2, 0.02, 0.05), runif(2, 0.5, 0.7),
              runif(3, 0.01, 0.03), runif(1, 0.65, 0.9))
)

# 转成modelsummary默认的宽格式(系数表)
coef_wide <- model_raw %>%
  select(-p_value) %>%
  pivot_wider(names_from = model, values_from = std_coef)

# 单独提取p值的宽格式,用于判断显著性
p_wide <- model_raw %>%
  select(-std_coef) %>%
  pivot_wider(names_from = model, values_from = p_value)

2. 自定义圆点渲染函数

这个函数负责根据系数大小生成对应样式的圆点,同时处理不显著的情况:

plot_coef_dot <- function(coef, p_val) {
  # p>0.05时返回空白图
  if (p_val > 0.05) {
    return(ggplot() + theme_void())
  }
  
  # 系数绝对值越大,圆点越大、颜色越深
  dot_size <- abs(coef) * 20  # 可自行调整缩放比例
  dot_color <- scales::alpha("#2c3e50", abs(coef))  # 单色深浅控制
  
  ggplot() +
    geom_point(aes(x = 1, y = 1), size = dot_size, color = dot_color) +
    theme_void() +
    theme(plot.margin = margin(0, 0, 0, 0, "pt"))
}

3. 构建可视化表格

把函数应用到gt表格的每个单元格:

final_table <- coef_wide %>%
  gt(rowname_col = "term") %>%
  # 对所有模型列应用自定义渲染
  text_transform(
    locations = cells_body(columns = starts_with("Model")),
    fn = function(x, col) {
      # 获取当前列对应的p值
      p_vals <- p_wide[[col]]
      # 逐单元格生成圆点图
      map2(x, p_vals, ~plot_coef_dot(as.numeric(.x), .y))
    }
  ) %>%
  # 表格美化
  tab_header(title = "多模型标准化系数可视化") %>%
  cols_label(
    `Model 1` = "模型1",
    `Model 2` = "模型2",
    `Model 3` = "模型3"
  ) %>%
  opt_table_lines(extent = "none") %>%
  opt_row_striping()

# 输出表格
final_table

关键调整点

  • 若要修改圆点颜色,直接替换dot_color里的十六进制色值即可。
  • 调整圆点大小的缩放比例,修改dot_size的乘数(比如改成25会让圆点更大)。
  • 如果你已有modelsummary生成的完整数据,只需把coef_wide和p_wide替换成你的数据框(注意要单独提取系数和p值两部分)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 03:05:37