R语言gt表格按行与目标值百分比差异实现行颜色渐变
解决gt包data_color报错及行级颜色渐变问题
错误原因
- Diff列计算错误:原代码中
(mydata$Target - mydata[, 1:4]) / mydata$Target * 100会生成一个5行4列的矩阵,直接赋值给mydata$Diff会导致数据框结构异常,后续表格处理出错。 - 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
相关产品推荐
相关产品推荐

