R shiny:基于 Lab 颜色的颜色单元格背景 space
R shiny: color cell background based on Lab color space
我有一个包含 Lab 颜色 space 值的数据框。这是一个例子:
L* a* b* color
80 25 -30 NA
75 55 55 NA
30 0 25 NA
10 -20 30 NA
55 15 20 NA
60 43 18 NA
... ...
这里有 1000 多条记录。我想根据 L*,a*,b* 列中的 Lab 颜色 space 值为列颜色中的单元格着色。我没有背景了Jquery。我在这里找到了一个例子:R Shiny: table conditional formatting within renderUI 但我不知道如何修改 Jquery 脚本。任何人都可以帮助我吗?谢谢!
如果您要使用 rgb 颜色 space 来着色,您可以这样做:
library(shiny)
color.min <- 0
color.max <- 250
n <- 100
# Simulate data
random.data <- data.frame("l"=runif(n,min=color.min,max=color.max),
"a"=runif(n,min=color.min,max=color.max),
"b"=runif(n,min=color.min,max=color.max),
"color"=rep(NA,n))
server <- shinyServer(function(input, output, session) {
observe({
output$table <- renderTable({
random.data
})
})
})
ui <- shinyUI(fluidPage(
# Add jQuery script
tags$head(
tags$script(
HTML("
function color(){
if(document.querySelector('#table')!=null){
// Select each table row in an array and loop over that with jQuery each
$('#table > table > tbody').find('tr').each(function(index, value) {
// Get values for rgb and round to integers
var vals = [];
$(this).children('td').slice(1, 4).each(function(index, value) {
vals[index] = parseInt( $(this).html() );
});
// Color 5:th child the selected rgb color
$(':nth-child(5)',this).css('background','rgb('+String(vals[0])+','+String(vals[1])+','+String(vals[2])+')');
})
}
else{
setTimeout(function() { color(); }, 100);
}
}
color();
")
)
),
fluidRow(
column(10, uiOutput("table")),
column(2,actionButton("color","color"))
)
))
shinyApp(ui = ui, server = server)
我有一个包含 Lab 颜色 space 值的数据框。这是一个例子:
L* a* b* color
80 25 -30 NA
75 55 55 NA
30 0 25 NA
10 -20 30 NA
55 15 20 NA
60 43 18 NA
... ...
这里有 1000 多条记录。我想根据 L*,a*,b* 列中的 Lab 颜色 space 值为列颜色中的单元格着色。我没有背景了Jquery。我在这里找到了一个例子:R Shiny: table conditional formatting within renderUI 但我不知道如何修改 Jquery 脚本。任何人都可以帮助我吗?谢谢!
如果您要使用 rgb 颜色 space 来着色,您可以这样做:
library(shiny)
color.min <- 0
color.max <- 250
n <- 100
# Simulate data
random.data <- data.frame("l"=runif(n,min=color.min,max=color.max),
"a"=runif(n,min=color.min,max=color.max),
"b"=runif(n,min=color.min,max=color.max),
"color"=rep(NA,n))
server <- shinyServer(function(input, output, session) {
observe({
output$table <- renderTable({
random.data
})
})
})
ui <- shinyUI(fluidPage(
# Add jQuery script
tags$head(
tags$script(
HTML("
function color(){
if(document.querySelector('#table')!=null){
// Select each table row in an array and loop over that with jQuery each
$('#table > table > tbody').find('tr').each(function(index, value) {
// Get values for rgb and round to integers
var vals = [];
$(this).children('td').slice(1, 4).each(function(index, value) {
vals[index] = parseInt( $(this).html() );
});
// Color 5:th child the selected rgb color
$(':nth-child(5)',this).css('background','rgb('+String(vals[0])+','+String(vals[1])+','+String(vals[2])+')');
})
}
else{
setTimeout(function() { color(); }, 100);
}
}
color();
")
)
),
fluidRow(
column(10, uiOutput("table")),
column(2,actionButton("color","color"))
)
))
shinyApp(ui = ui, server = server)