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

如何让gt表格gt_color_box中的NA值显示为空白或白色?

解决gtExtras中gt_color_box函数NA值颜色不生效的问题

问题概述

使用gtExtras::gt_color_box时,指定na.color = "#FFFFFF"无法将NA值的背景色改为白色,所有NA仍显示默认灰色;同时希望超出domain范围的值也能应用指定颜色,不想通过将NA转0的繁琐方式处理。

原因分析

查看gt_color_box的源码可知,该函数封装了gt::data_color,但可能存在参数传递遗漏,或是gt_theme_espn主题的CSS样式覆盖了NA单元格的背景色设置,导致na.color参数失效。

解决方案:直接通过tab_style自定义NA单元格样式

利用gt包的tab_style函数,直接为所有NA单元格(或超出domain后转为NA的单元格)设置白色背景,不受主题或gt_color_box的限制。

完整代码示例

library(tidyverse)
library(gt)
library(gtExtras)

df <- data.frame(
  name = c("Jared Jones", "Corbin Burnes", "Freddy Peralta", 
           "Zack Wheeler", "Zach Eflin", "George Kirby", "Logan Webb", 
           "Tanner Houck", "Grayson Rodriguez", "Brandon Pfaadt"), 
  ip = c(23, 23.2, 17.2,24, 23.1, 20.1, 30.2, 26.2, 24, 23.2), 
  fastball = c(148.9, NA, 138.6, 93.5, 63, 102, 57.8, 24.3, 111.3, 73.9), 
  sinker = c(NA,119.8, NA, 100.6, 95.4, 100.3, 97.5, 104.6, 111.4, 93.6), 
  cutter = c(NA, 127.7, NA, 83.7, 84, NA, NA, 99.8, 91.6, NA), 
  splitter = c(NA,NA, NA, 92.3, NA, 91.6, NA, 98.8, NA, NA), 
  slider = c(126.8,106.6, 102.7, 124.3, 133.8, 109, 111.8, 117.5, NA, 131.3), 
  curve = c(109.7,105, 85.6, 103.7, 108.8, 117.9, NA, NA, 109.9, 91), 
  changeup = c(139.3,118.7, 53.7, NA, 69.5, NA, 138.1, NA, 136.9, 89)
)

# 定义需要处理的统计列
stat_cols <- c("fastball", "sinker", "cutter", "splitter", "slider", "curve", "changeup")

# 处理超出domain范围的值,转为NA(可选,若需要统一处理超出范围和NA的颜色)
df_processed <- df %>%
  mutate(
    fastball = ifelse(fastball < 20 | fastball > 200, NA, fastball),
    sinker = ifelse(sinker < 10 | sinker > 200, NA, sinker),
    cutter = ifelse(cutter < 80 | cutter > 140, NA, cutter),
    splitter = ifelse(splitter < 10 | splitter > 200, NA, splitter),
    slider = ifelse(slider < 80 | slider > 140, NA, slider),
    curve = ifelse(curve < 80 | curve > 120, NA, curve),
    changeup = ifelse(changeup < 10 | changeup > 160, NA, changeup)
  )

df_processed %>% 
  gt() %>% 
  gt_theme_espn() %>%  
  cols_align(align = "center", columns = stat_cols) %>% 
  gt_color_box(columns = fastball, domain = 20:200, palette = "ggsci::blue_material") %>%
  gt_color_box(columns = sinker, domain = 10:200, palette = "ggsci::red_material") %>%
  gt_color_box(columns = cutter, domain = 80:140, palette = "ggsci::pink_material") %>%
  gt_color_box(columns = splitter, domain = 10:200, palette = "ggsci::green_material") %>%
  gt_color_box(columns = slider, domain = 80:140, palette = "ggsci::teal_material") %>%
  gt_color_box(columns = curve, domain = 80:120, palette = "ggsci::purple_material") %>%
  gt_color_box(columns = changeup, domain = 10:160, palette = "ggsci::orange_material") %>%
  # 为每列的NA单元格设置白色背景
  walk(stat_cols, ~{
    tab_style(
      style = cell_fill(color = "#FFFFFF"),
      locations = cells_body(columns = .x, rows = is.na(.data[[.x]]))
    )
  }) %>%
  tab_header(title = 'Pitcher Stuff+ Rankings') %>% 
  tab_source_note(source_note = 'Data: FanGraphs')

说明

  1. 若不需要处理超出domain的值,可跳过df_processed的步骤,直接对原始df应用tab_style。
  2. 使用walk遍历所有统计列,避免重复编写tab_style代码,提升效率。
  3. 这种方法直接针对HTML单元格设置样式,不会被主题或gt_color_box的默认样式覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:47:07