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

gt包列按值域渐变填充:实现灰到红、灰到绿的色彩映射

实现方案

你需要改用gt自带的data_color()函数完成渐变映射,原有代码报错是因为scales::col_bin()的参数顺序颠倒,且手动拆分区间的方式无法支持连续渐变效果。

完整可运行代码

library(gt)
library(tidyverse)
library(scales)

# 示例测试数据,可替换为你的实际数据
df <- tibble(
  name = paste0("项目", 1:10),
  performance = runif(10, 50, 100),
  value = runif(10, 0, 1),
  threshold = rep(0.5, 10) # 阈值支持每行设置不同值
)

logistic_pattern <- function(x, thresholds) {
  sigma <- 0.2
  y <- 1/(1+exp(-(x - thresholds)/sigma))
  return(y)
}

gt(df) %>% 
  data_color(
    columns = c(name, performance),
    rows = everything(),
    fn = function(x) {
      # 先对数值做logistic转换
      trans_vals <- map2_dbl(df$value, df$threshold, ~logistic_pattern(.x, .y))
      # 定义红-灰-绿三色渐变板,对应转换后0-1的值域区间
      colorRampPalette(c("red", "gray85", "green"))(100)[cut(trans_vals, breaks = 100)]
    }
  )

关键修改说明

  • 直接在data_color的自定义函数中完成数值转换到颜色映射的全流程,无需拆分多个tab_style规则
  • 原来报错的scales::col_bin调用是因为参数顺序错误:正确顺序是先传调色板,再传值域范围,你之前把两个参数写反了才触发维度不匹配报错
  • 支持每行设置不同的阈值,适配更复杂的场景
  • 渐变精度可通过修改colorRampPalette的参数(示例中为100)调整,数值越大渐变越平滑

渐变填充效果参考图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:57:00