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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03