R блестящий рендерТаблицы меняют цвета ячеек - PullRequest
0 голосов
/ 11 июня 2018

У меня есть таблица, и я хочу покрасить каждую ячейку в зависимости от значения (0-100) в X (= 6) разных оттенков синего.Таблица отображается в виде TabPanel.

В настоящее время я использую блестящие файлы для вызова функции 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) 

UPDATE В конце я остался с решением JavaScript, но использовал блестящие специфические события js, чтобы получитьжелаемый эффект:

$(document).on("shiny:value", function(e) {
  if (e.name == "myComponent") {
    e.preventDefault();
    $('#myComponent').html(e.value);
    //color code etc.
}

1 Ответ

0 голосов
/ 11 июня 2018

Вы можете использовать tableHTML для создания таблицы и ее условного стиля.

library(shiny)
library(tableHTML)

Измените ui для использования функции вывода с tableHTML:

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

Затем используйте render_tableHTML() для визуализации таблицы, которая создается внутри.

Вы можете создать простую таблицу HTML, используя функцию tableHTML().Затем вы можете использовать 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

Вы можетеузнайте больше о том, как использовать tableHTML в виньетках .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...