使用gt包根据另一数据框值为表格上色时颜色显示异常
问题原因
你当前使用method = "numeric"的方式会将columns中的数值视为连续变量进行颜色映射,它会基于数值的最小/最大值线性分配调色板颜色。但你的需求是离散规则:p中值为0对应红色,1对应绿色,这种场景下numeric方法并不适用,导致颜色映射不符合预期。
解决方案
可以通过两种方式修正:
方式1:基于现有合并数据框,改用离散因子映射
将用于颜色映射的辅助列转为因子类型,同时指定method = "factor",明确0和1对应的颜色顺序:
a <- data.frame(name=c("cat", "dog"), age=c(1,2), weight=c(4,2)) p <- data.frame(name=c(1, 0), age=c(1,1), weight=c(1,0)) # 合并数据并将辅助列转为因子 a <- cbind(a, p %>% set_names(paste0("_",names(p))) %>% mutate(across(everything(), as.factor))) a %>% gt() %>% data_color( columns = names(a)[grepl("_",names(a))], target_columns = names(a)[!grepl("_",names(a))], method = "factor", palette = c('red', 'green'), domain = c("0", "1") # 指定因子顺序,0对应红色,1对应绿色 )
方式2:无需合并数据框,直接传入p的矩阵作为映射依据
利用data_color的values参数,直接传入p的数值矩阵,更简洁:
a <- data.frame(name=c("cat", "dog"), age=c(1,2), weight=c(4,2)) p <- data.frame(name=c(1, 0), age=c(1,1), weight=c(1,0)) a %>% gt() %>% data_color( target_columns = everything(), # 目标为a的所有列 method = "factor", palette = c('red', 'green'), values = as.matrix(p) # 直接用p的数值作为颜色映射的依据 )
两种方式都能实现:p中值为1的单元格对应绿色,0对应红色的需求。
内容的提问来源于stack exchange,提问作者pluke
相关产品推荐
相关产品推荐

