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

如何为无列名的gt表格中的p值按阈值设置颜色编码?

解决gt表格无显示列名时的p值颜色编码问题

你的表格并非真的没有列名,只是通过cols_label(group1 = "")把第一列的显示标签设为空了,其他p值列的列名其实是"0"、"1"、"10"、"100"、"1000"。要实现p值颜色编码,只需正确选中这些列并处理数值类型即可,以下是两种可行方案:

方案一:使用data_color批量设置颜色

先将p值列转为数值类型,再根据阈值设置颜色:

library(dplyr)
library(gt)
library(tidyr)

group1 <- c("0", "1", "10", "100", "1000")
group2 <- c("0", "1", "10", "100", "1000")
pvalue <- c("0.06", "0.042", "0.001", "1", "0.02")
data <- data.frame(group1, group2, pvalue)

data %>% 
  pivot_wider(names_from = group2, values_from = pvalue) %>%
  mutate(across(-group1, as.numeric)) %>%  # 将所有p值列转为数值类型
  gt() %>%
  cols_label(group1 = "") %>% 
  sub_missing(columns = everything(), rows = everything(), missing_text = "") %>%
  data_color(
    columns = -group1,  # 选中除group1外的所有p值列
    colors = scales::col_bin(
      palette = c("red", "blue", "black"),
      bins = c(-Inf, 0.01, 0.05, Inf),
      direction = 1
    )
  )

方案二:使用fmt结合cell_text自定义颜色逻辑

通过函数判断每个p值的阈值,灵活设置颜色:

library(dplyr)
library(gt)
library(tidyr)

group1 <- c("0", "1", "10", "100", "1000")
group2 <- c("0", "1", "10", "100", "1000")
pvalue <- c("0.06", "0.042", "0.001", "1", "0.02")
data <- data.frame(group1, group2, pvalue)

data %>% 
  pivot_wider(names_from = group2, values_from = pvalue) %>%
  gt() %>%
  cols_label(group1 = "") %>% 
  sub_missing(columns = everything(), rows = everything(), missing_text = "") %>%
  fmt(
    columns = -group1,
    fns = function(x) {
      x_num <- as.numeric(x)
      color <- dplyr::case_when(
        x_num < 0.01 ~ "red",
        x_num < 0.05 ~ "blue",
        TRUE ~ "black"
      )
      cell_text(color = color)
    }
  )

关键注意点:

  • 原代码中pvalue是字符类型,必须先转为数值才能进行大小比较,否则颜色逻辑无法生效。
  • 选中p值列时,用-group1即可排除第一列,无需手动输入所有列名,更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:15:34