我有一张桌子,想根据X(= 6)不同蓝色阴影的值(0-100)为每个单元着色。该表显示在TabPanel中。

目前,我正在使用Shinyjs调用javascript函数,该函数选择我的表并将CSS样式添加到<td>标记中,具体取决于值范围。

问题是,在第一次加载表时(单击TabPanel),只有重新加载后才显示颜色。

因此,我正在寻找R中的解决方案(不需要额外的Javascript),或者正在寻找一种自动重新加载Table / TabPanel的方法。

library(shiny)

ui <- shinyUI(fluidPage(
    tableOutput("dataTable")
  ))

server <- shinyServer(function(input, output) {

  output$dataTable <- renderTable({
    data <- getDataFromSomeWhere();
    //Some operations on data
    data
    //I want to color every table cell, depening on value (f.e. 0-5 = white, 10-20 = light blue ...)
  }, rownames = TRUE, colnames = TRUE)

shinyApp(ui = ui, server = server)

更新
最后,我坚持使用JavaScript解决方案,但使用了 Shiny 的特定js事件来获得所需的效果:
$(document).on("shiny:value", function(e) {
  if (e.name == "myComponent") {
    e.preventDefault();
    $('#myComponent').html(e.value);
    //color code etc.
}

最佳答案

您可以使用tableHTML创建表并有条件地设置其样式。

library(shiny)
library(tableHTML)

更改ui以使用tableHTML的输出功能:
ui <- shinyUI(fluidPage(
  tableHTML_output("dataTable")
))

然后使用render_tableHTML()渲染其中生成的表。

您可以使用tableHTML()函数创建纯HTML表。然后,您可以使用add_css_conditional_column()创建条件(在这种情况下为between)来更改背景色(注意:您也可以使用其他CSS。在示例中,我使用#f6f6f6而不是white,因为您不会看到输出)
server <- shinyServer(function(input, output) {

  getDataFromSomeWhere <- reactive({
    mtcars
  })

  output$dataTable <- render_tableHTML({
    data <- getDataFromSomeWhere();
    # //Some operations on data
    data %>%
      tableHTML(rownames = TRUE) %>%
      add_css_conditional_column(conditional = 'between',
                                 between = c(0, 5),
                                 css = list(c('background-color'),
                                            c('#f6f6f6')),
                                 columns = 1:ncol(data)) %>%
      add_css_conditional_column(conditional = 'between',
                                 between = c(10, 20),
                                 css = list(c('background-color'),
                                            c('lightblue')),
                                 columns = 1:ncol(data))

  })

})

最终结果是:
shinyApp(ui = ui, server = server)

javascript - R Shiny renderTable更改单元格颜色-LMLPHP

您可以在vignettes中找到有关如何使用tableHTML的更多详细信息。

08-08 05:42