gpt4 book ai didi

r - 如何使用 R DT Shiny 基于颜色向量为数据表中的文本着色?

转载 作者:行者123 更新时间:2023-12-04 13:03:26 24 4
gpt4 key购买 nike

我正在开发一个 R Shiny 应用程序,并希望根据我提供的颜色向量对数据表中的方块重新着色。下面显示了一个不起作用的简单示例。我知道您可以根据数值为单元格和文本着色,但我需要提供准确的颜色。任何帮助将不胜感激。

libarry(DT)

# set the colors for each box
mycolors = c("dodgerblue2","grey","firebrick2")

# recolor entire row (works)
DT::datatable(data.frame(src=c(1,2,3),tgt=c("█" ,"█" ,"█")),escape=F) %>%
formatStyle(columns = 1, color = "red") %>%
formatStyle(columns = 2, color = "blue")

# recolor based on mycolors (doesn't work)
DT::datatable(data.frame(src=c(1,2,3),tgt=c("█" ,"█" ,"█")),escape=F) %>%
formatStyle(columns = 1, color = "red") %>%
formatStyle(columns = 2, color = mycolors)

最佳答案

这是一个解决方案:

dat <- data.frame(src=c(1,2,3), tgt=c("&#9608;", "&#9608;", "&#9608;"))
mycolors <- c("dodgerblue2", "grey", "firebrick2")
rgbcolors <- apply(grDevices::col2rgb(mycolors), 2,
function(rgb) sprintf("rgb(%s)", paste(rgb, collapse=",")))
column <- 2
jscode <- paste("function(row, data, index) {",
sprintf("var colors=%s;\n$(this.api().cell(index, %s).node()).css('color', colors[index]);",
sprintf("[%s]", paste(sprintf("'%s'", rgbcolors), collapse=", ")), column), "}", sep="\n")
datatable(dat, escape=FALSE,
options = list(rowCallback=JS(jscode))
)
rgbcolors vector 包含颜色的 RGB 定义,为 html 做好准备:
> rgbcolors
[1] "rgb(28,134,238)" "rgb(190,190,190)" "rgb(238,44,44)"

字符串 jscode是行回调的 Javascript 代码:
> cat(jscode)
function(row, data, index) {
var colors=['rgb(28,134,238)', 'rgb(190,190,190)', 'rgb(238,44,44)'];
$(this.api().cell(index, 2).node()).css('color', colors[index]);
}

enter image description here

关于r - 如何使用 R DT Shiny 基于颜色向量为数据表中的文本着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47734773/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com