![](/img/trans.png)
[英]How to replaceData in DT rendered in R shiny using the datatable function
[英]How to color text in a datatable based on a vector of colors using R DT Shiny?
我正在開發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("█", "█", "█"))
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
向量包含顏色的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]);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.