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

R语言gt表格自定义调色板时如何设置NA值为透明色?

问题解决:gt表格中NA值的颜色设置

问题背景

现有如下数据框:

Test = structure(list(Corr_p = c(0.65, 0.64, 0.64, NA, 0.79, 0.77), 
                      Case_p = c(24.57, 12.89, 20.92, NA, 11.1, 12.2), 
                      Control_p = c(16.4, 9.38, 16.21, NA, 7, 6.17), 
                      Delta_p = c(49.82, 37.42, 29.06, NA, 58.57, 97.73)), 
                 row.names = 18:23, class = "data.frame")

为Delta_p列定义了自定义调色板函数pal,为Corr_p列定义了corr_palette_pos:

library(gt)
pal <- function(x) {
  f_neg <- scales::col_numeric(
    palette = c(emerald),
    domain = c(min(test, na.rm = TRUE), 0)
  )
  f_pos1 <- scales::col_numeric(
    palette = c(oryel),
    domain = c(0, 300)
  )
  f_pos2 <- scales::col_numeric(
    palette = c(sunshort),
    domain = c(300, 500)
  )
  f_pos3 <- scales::col_numeric(
    palette = c(toplevel),
    domain = c(500, max(test, na.rm = TRUE))
  )
  
  dplyr::case_when(
    x < 0 ~ f_neg(x),
    x < 300 ~ f_pos1(x),
    x < 500 ~ f_pos2(x),
    .default = f_pos3(x)
  )
}

library(scales)
corr_palette_pos <- col_numeric(c("#FEF0D9", "#990000"), domain = c(min_cor_pos, max_cor_pos), alpha = 0.75)

使用gt的data_color渲染表格后,NA值显示默认颜色,希望将其设为透明色或白色,但直接在scales::col_numeric中添加na.color参数会导致所有值颜色相同,需修改自定义函数逻辑解决。

解决方案

1. 修改自定义pal函数处理NA值

在case_when中新增NA判断分支,直接返回透明色(或白色),同时修正原函数中变量名错误(将test改为输入参数x来计算范围):

pal <- function(x) {
  # 用输入参数x计算domain的极值
  min_x <- min(x, na.rm = TRUE)
  max_x <- max(x, na.rm = TRUE)
  
  f_neg <- scales::col_numeric(
    palette = c(emerald),
    domain = c(min_x, 0)
  )
  f_pos1 <- scales::col_numeric(
    palette = c(oryel),
    domain = c(0, 300)
  )
  f_pos2 <- scales::col_numeric(
    palette = c(sunshort),
    domain = c(300, 500)
  )
  f_pos3 <- scales::col_numeric(
    palette = c(toplevel),
    domain = c(500, max_x)
  )
  
  dplyr::case_when(
    is.na(x) ~ "transparent", # 为NA值设置透明色
    x < 0 ~ f_neg(x),
    x < 300 ~ f_pos1(x),
    x < 500 ~ f_pos2(x),
    .default = f_pos3(x)
  )
}

2. 为corr_palette_pos添加NA处理

直接在col_numeric中添加na.color参数即可,此处不会出现颜色统一问题:

# 先计算Corr_p列的极值
min_cor_pos <- min(Test$Corr_p, na.rm = TRUE)
max_cor_pos <- max(Test$Corr_p, na.rm = TRUE)

corr_palette_pos <- scales::col_numeric(
  palette = c("#FEF0D9", "#990000"), 
  domain = c(min_cor_pos, max_cor_pos), 
  alpha = 0.75,
  na.color = "transparent" # 设置NA值为透明色
)

3. 完整表格渲染代码

Test %>%
  gt() %>% 
  data_color(columns = Delta_p, colors = pal) %>%
  data_color(columns = Corr_p, colors = corr_palette_pos)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:17:09