Сравнение строк styleColorBar в DT Shiny - PullRequest
0 голосов
/ 15 марта 2020

Я хочу сделать сравнение строк с styleColorBar. В этом примере я хочу сравнивать Sepal.Length и Sepal.Width построчно.

app.R

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(DT::dataTableOutput("table")),
  server = function(input, output) {
    iris2 <- iris[c(1:10),c(1,2)]

    observe({

      output$table <- DT::renderDataTable({
        dat <- datatable(iris2,
                         options = list(
                           paging = FALSE
                         )) %>%
          formatStyle('Sepal.Length',background = styleColorBar(iris2$Sepal.Length, '#66cdaa'),backgroundSize = '98% 88%',backgroundRepeat = 'no-repeat', backgroundPosition = 'center') %>%
          formatStyle('Sepal.Width',background = styleColorBar(iris2$Sepal.Width, '#66cdaa'),backgroundSize = '98% 88%',backgroundRepeat = 'no-repeat', backgroundPosition = 'center')
        return(dat)
      })

    })

  })

Однако, поскольку styleColorBar - это сравнение для каждого столбца, максимальный значение и минимальное значение отличаются слева и справа, а длина полосы не совпадает

app.R

library(shiny)
library(DT)

shinyApp(
  ui = fluidPage(DT::dataTableOutput("table")),
  server = function(input, output) {
    iris2 <- iris[c(1:10),c(1,2)]

    observe({

      max <- max(iris2[,1:2], na.rm = TRUE)
      max <- c(max,max)
      min <- min(iris2[,1:2], na.rm = TRUE)
      min <- c(min,min)
      iris2 <- rbind(iris2,max,min)

      output$table <- DT::renderDataTable({
        dat <- datatable(iris2,
                         options = list(
                           paging = FALSE
                         )) %>%
          formatStyle('Sepal.Length',background = styleColorBar(iris2$Sepal.Length, '#66cdaa'),backgroundSize = '98% 88%',backgroundRepeat = 'no-repeat', backgroundPosition = 'center') %>%
          formatStyle('Sepal.Width',background = styleColorBar(iris2$Sepal.Width, '#66cdaa'),backgroundSize = '98% 88%',backgroundRepeat = 'no-repeat', backgroundPosition = 'center')
        return(dat)
      })

    })

  })

Итак, я добавил запись о максимальном и минимальном значении Sepal.Length и Sepal.Width для каждого столбца и сделали длину бара равной. Сравнение влево-вправо в баре прошло хорошо, но не очень круто. Есть ли способ скрыть последние две строки от пользователя? Или я могу выровнять левый и правый столбцы без добавления двух строк?

1 Ответ

1 голос
/ 22 марта 2020

Вы можете сделать

library(DT)

iris2 <- iris[1:10, c(1,2)]
datatable(iris2,
          options = list(
            paging = FALSE
          )) %>%
  formatStyle('Sepal.Length', 
              background = styleColorBar(c(iris2$Sepal.Length, iris2$Sepal.Width), '#66cdaa'), 
              backgroundSize = '98% 88%', 
              backgroundRepeat = 'no-repeat', 
              backgroundPosition = 'center') %>%
  formatStyle('Sepal.Width', 
              background = styleColorBar(c(iris2$Sepal.Length, iris2$Sepal.Width), '#66cdaa'), 
              backgroundSize = '98% 88%', 
              backgroundRepeat = 'no-repeat', 
              backgroundPosition = 'center')
...