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

使用R的gt包为数据框按值范围着色的问题及解决方案

使用gt包为数据框按指定值范围着色的问题与解决方案

问题说明

需要为包含a和b列的数据框df按以下规则着色:

  • 值低于11时显示绿色
  • 11到15之间(含边界)显示绿色到红色的渐变
  • 值高于15时显示红色

尝试了以下代码,但未达到预期效果:

library(gt)
library(dplyr)

df <- data.frame(a = 1:21, b = rep(10:30))

df %>%
  gt() %>%
  gt::data_color(
    colors = scales::col_numeric(
      # na.color = "green",
      palette = c("green", "red"),
      domain = c(11, 15)
    )
  )

核心问题:如果启用na.color = "green"参数,会导致高于15的值也被染成绿色,不符合需求。

解决方案

感谢@mael提供的可行方案,通过自定义调色函数实现分区间精准着色:

pal <- function(x, bin = c(11,15), palette = c("green", "red")) {
  # 低于11的区间:纯色绿色
  f1 <- scales::col_bin(
    palette = palette[1],
    bin = c(-Inf, bin[1])
  )
  # 11到15的区间:绿色到红色渐变
  f2 <- scales::col_numeric(
    palette = palette,
    domain = c(bin[1], bin[2])
  )
  # 高于15的区间:纯色红色
  f3 <- scales::col_bin(
    palette = palette[2],
    bin = c(bin[2], Inf)
  )
  
  dplyr::case_when(
    x < bin[1] ~ f1(x),
    x < bin[2] ~ f2(x),
    TRUE ~ f3(x)
  )
}

df %>%
  gt() %>%
  gt::data_color(fn = pal)

该函数通过case_when为不同数值区间分配对应的着色逻辑:

  • 低于11的值调用col_bin返回纯色绿色
  • 11到15之间的值调用col_numeric生成渐变色彩
  • 高于15的值调用col_bin返回纯色红色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 08:45:10