【发布时间】:2019-10-23 21:23:10
【问题描述】:
我想使用 DT 的 formatStyle() 来提供每行的颜色渐变。
鉴于此示例数据:
library(DT)
data <- round(data.frame(
x = runif(5, 0, 5),
y = runif(5, 0, 10),
z = runif(5, 0, 20)
), 3)
break_points <- function(x) stats::quantile(x, probs = seq(.05, .95, .05), na.rm = TRUE)
red_shade <- function(x) round(seq(255, 40, length.out = length(x) + 1), 0) %>% {paste0("rgb(255,", ., ",", ., ")")}
我可以使用以下代码根据整个表格中的值为单元格背景着色:
brks <- break_points(data)
clrs <- red_shade(brks)
datatable(data) %>% formatStyle(names(data), backgroundColor = styleInterval(brks, clrs))
或者我可以使用以下代码根据每列的值为单元格背景着色:
brks <- apply(data, 2, break_points)
clrs <- apply(brks, 2, red_shade)
dt <- datatable(data)
for(i in colnames(data)){
dt <- dt %>% formatStyle(i, backgroundColor = styleInterval(brks[,i], clrs[,i]))
}
dt
但我不确定每行最简单、最干净的解决方案是什么,因此在每一行中,最高值最暗,而最低值最亮。
【问题讨论】:
-
不是你问的,Dean,但你看过
gt吗?我知道它使用gt::data_color提供每个单元格格式。 -
gt 还不够成熟,无法满足我的需求。它没有任何交互性,也不适合在闪亮的环境中使用(还没有!)
-
交互性当然是我希望看到的添加到它的功能列表中的东西。同意,只是想我会提到它。 (希望我能为您解答 this 问题。)