如何在gt包中根据每行的数值设置条件颜色?
方案1:直接处理已转置的t(mtcars)格式数据
你的需求可以通过data_color()的rows参数实现,指定要应用配色规则的行,同时选中所有数值列即可:
library(gt) library(dplyr) # 构造和你示例一致的转置后数据集 t_mtcars <- mtcars %>% t() %>% as.data.frame() %>% tibble::rownames_to_column("指标") # 按行设置条件颜色 t_mtcars %>% gt() %>% # 给mpg行所有数值列设置红到绿的配色 data_color( columns = where(is.numeric), rows = 指标 == "mpg", colors = scales::col_numeric(c("red", "green"), domain = c(0, 30)) ) %>% # 给cyl行设置蓝到橙的配色 data_color( columns = where(is.numeric), rows = 指标 == "cyl", colors = scales::col_numeric(c("lightblue", "orange"), domain = c(4, 8)) ) # 其余行可按照相同逻辑新增data_color规则
方案2:使用原mtcars格式数据,先配色再转置
gt从v0.8版本开始支持cols_transpose()方法,可以直接对表格对象转置,完全满足你的需求:
mtcars %>% tibble::rownames_to_column("车型") %>% gt() %>% # 先给原数据的每一列设置你需要的配色规则 data_color( columns = mpg, colors = scales::col_numeric(c("red", "green"), domain = c(0,30)) ) %>% data_color( columns = cyl, colors = scales::col_numeric(c("lightblue", "orange"), domain = c(4,8)) ) %>% # 直接转置表格,转置后原列的配色规则会自动对应到新的行 cols_transpose(.rownames = "指标")
如果指标较多不想逐个写规则,可以用purrr批量处理:
library(purrr) # 定义批量配色函数 color_fun <- function(gt_obj, col_name) { col_range <- range(mtcars[[col_name]], na.rm = T) gt_obj %>% data_color( columns = all_of(col_name), colors = scales::col_numeric(c("purple", "yellow"), domain = col_range) ) } # 批量应用所有列的配色后转置 mtcars %>% tibble::rownames_to_column("车型") %>% gt() %>% reduce(colnames(mtcars), color_fun, .init = .) %>% cols_transpose(.rownames = "指标")
内容的提问来源于stack exchange,提问作者kin182
相关产品推荐
相关产品推荐

