首页 > 解决方案 > 编辑数据表中单元格的 RGB 颜色 (R)

问题描述

我正在开发一个包含数据表的项目。我希望数据表单元格由列中的相似值着色。我很难理解如何修改下面的代码以便能够在我的数据表中选择颜色。代码取自我在 Stackoverflow 上找到的另一个示例:

set.seed(1)
df <- cbind.data.frame(matrix(round(rnorm(50), 3), 10), sample(0:1, 10, TRUE))
brks <- apply(df, 2, quantile, probs=seq(.05, .95, .05), na.rm=T)
clrs <- apply( brks, 2, function(x) round(seq(255, 40, length.out = length(x)+1), 0) 
%>% {paste0("rgb(255,", ., ",", ., ")")})
eval(parse(text=paste0("datatable(df) ", paste(sapply(1:ncol(df), function(i) 
paste0("%>% formatStyle(names(df)[",i,"], backgroundColor = styleInterval(brks[,",i,"], 
clrs[,",i,"]))") ), collapse = " " ))))

我不明白如何修改 paste0 中的 clrs 行和 rgb 函数以获得我想要的颜色。我已经修改了这两个块,但无法弄清楚它是如何工作的。有人可以向我解释如何使用上面的代码准确指定颜色。如果我想获得蓝色或绿色或从一种颜色褪色到另一种颜色,我将如何去做?

我很困。任何帮助,将不胜感激!谢谢!

标签: rdatatablecolorsrgbdt

解决方案


Firsteval用于评估名称、呼叫或其他...在这种情况下,它是一个名称。我提出了一个更简单的代码,我可以解释每个部分,这将是你调整它的部分:

library(DT)

# the dataset
df <- cbind.data.frame(matrix(round(rnorm(50), 3), 10))

# the color wanted
sample_color <- data.frame(col1 = c(0.2, 0.1, 0.6),
                           col2 = c(0.5, 0.1, 0.3))

datatable(df) %>%
    formatStyle('1', color = eval(call(name = "rgb",
                                       matrix(sample_color$col1, ncol = 3))))

matrix因此我们需要使用. eval和是唯一的call基础 R,如果您直接访问他们的演示页面,您可能会更好地理解:evalcall

编辑 1 更改数据表单元格的背景颜色

datatable(df) %>%
    formatStyle('1', color = eval(call(name = "rgb",
                                       matrix(sample_color$col1, ncol = 3))),
                backgroundColor = eval(call(name = "rgb",
                                             matrix(sample_color$col1, ncol = 3))))

查看DT的包小插图以更好地了解它的工作原理。有一个部分 formatCurrency 适合您。


推荐阅读