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

R语言gt表格按行与目标值百分比差异实现行颜色渐变

解决gt包data_color报错及行级颜色渐变问题

错误原因

  1. Diff列计算错误:原代码中(mydata$Target - mydata[, 1:4]) / mydata$Target * 100会生成一个5行4列的矩阵,直接赋值给mydata$Diff会导致数据框结构异常,后续表格处理出错。
  2. data_color参数误用:gt包的data_color()函数没有scale、colors、reverse_colors这些参数,这些错误参数直接导致了"unused arguments"报错。

修正后的代码

以下代码实现每行根据对应单元格与该行Target值的百分比差异进行颜色渐变(差异越大越红,越接近Target越绿):

library(gt)
library(dplyr)
library(scales)

# 示例数据集
mydata <- data.frame(
  Col1 = c(10, 12, 15, 8, 9),
  Col2 = c(20, 22, 25, 18, 19),
  Col3 = c(30, 32, 35, 28, 29),
  Col4 = c(40, 42, 45, 38, 39),
  Target = c(100, 105, 110, 95, 100)
)

mytable <- mydata %>%
  gt() %>%
  # 为Col1-Col4添加行级颜色渐变
  data_color(
    columns = c(Col1, Col2, Col3, Col4),
    # 自定义颜色映射函数:按每行计算单元格与Target的百分比差异,映射到红绿渐变
    fn = function(x) {
      # 获取当前行的Target值
      target <- .data$Target[cur_row()]
      # 计算百分比差异:(Target - 单元格值)/Target *100
      diff_pct <- (target - x) / target * 100
      # 将差异值映射到红绿渐变(差异范围设为0到100,可根据实际调整)
      col_numeric(palette = c("green", "red"), domain = c(0, 100))(diff_pct)
    }
  )

mytable

代码说明

  • 行级颜色映射:通过cur_row()获取当前行的Target值,计算每个单元格与该行Target的百分比差异,再用col_numeric()将差异值映射到红绿渐变。
  • 参数正确使用:data_color()的columns指定要着色的列,fn自定义颜色计算逻辑,这是gt包实现行级动态着色的标准方式。
  • 颜色范围调整:如果需要调整颜色渐变的范围,修改domain = c(0, 100)中的数值即可(比如差异可能为负,可设为c(-20, 100))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:52:42