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
相关产品推荐
相关产品推荐

