javascript - R shiny renderTable 改变单元格颜色

标签 javascript css r html-table shiny

我有一个表格,我想根据 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) 

shiny_app_output

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

关于javascript - R shiny renderTable 改变单元格颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50798941/

相关文章:

javascript - 将 jQuery 焦点转移到下一个 div 分隔输入

javascript - 从对话框 html 元素访问 ckeditor 函数而不使用 "onOk"

javascript - 访问 JavaScript 对象最快的方法是什么?

html - 是否溢出 :hidden do clear:

R Shiny : Unable to dispatch task for application, 有 1 个任务正在进行中

javascript - 如何通过 JavaScript 在新浏览器窗口中仅打开外部链接?

css - 在 GridView 中使用“编辑命令列”按钮时,获取要更改的选定行背景颜色

css - Chrome : why does css 3d transform on large elements with transform scale < 0 cause white screen bug?

r - 从数据帧列表中获取名称与 id 连接的向量

python - 基于列的分组和取消分组