Изменение высоты d3heatmapOutput() в R Shiny

Я создаю тепловую карту, используя библиотеку d3heatmap R: https://cran.r-project.org/web/packages/d3heatmap/d3heatmap.pdf

Я хотел бы иметь возможность позволить пользователю свободно настраивать (через пользовательский интерфейс) height = аргумент в d3heatmapOutput() функция.

Сравните следующие два фрагмента кода (просто скопируйте / вставьте их непосредственно в R Studio), где единственная разница между ними заключается в значении height = аргумент в d3heatmapOutput():

library(d3heatmap)
library(shiny)
ui <- fluidPage(
  h1("A heatmap demo"),
  selectInput("palette", "Palette", c("YlOrRd", "RdYlBu", "Greens", "Blues")),
  checkboxInput("cluster", "Apply clustering"),
  d3heatmapOutput("heatmap", height = "400px")
  )
server <- function(input, output, session) {
  output$heatmap <- renderD3heatmap({
    d3heatmap(
      scale(mtcars),
      colors = input$palette,
      dendrogram = if (input$cluster) "both" else "none"
) })
    }
    shinyApp(ui, server)

VS.

library(d3heatmap)
library(shiny)
ui <- fluidPage(
  h1("A heatmap demo"),
  selectInput("palette", "Palette", c("YlOrRd", "RdYlBu", "Greens", "Blues")),
  checkboxInput("cluster", "Apply clustering"),
  d3heatmapOutput("heatmap", height = "1000px")
  )
server <- function(input, output, session) {
  output$heatmap <- renderD3heatmap({
    d3heatmap(
      scale(mtcars),
      colors = input$palette,
      dendrogram = if (input$cluster) "both" else "none"
) })
    }
    shinyApp(ui, server)

Я хотел бы позволить пользователю выбрать это значение height = самих себя. Тем не менее, потому что "400px" не числовой аргумент, такие инструменты пользовательского интерфейса, как numericInput() не работает Точно так же, selectInput() тоже не работает, например:

selectInput("foo", "Bar:", c("400px", "700px", "1000px"))

где d3heatmapOutput("heatmap", height = "foo"), К сожалению, ни один из этих вариантов не работает, что заставляет меня задуматься, не упустил ли я более простой и элегантный вариант.

1 ответ

Решение

В этом примере вы можете контролировать высоту графика с помощью ползунка. Идея состоит в том, чтобы сделать карту на стороне сервера и использовать paste0 Функция для установки желаемого размера в пикселях.

library(d3heatmap)
library(shiny)
ui <- fluidPage(
  h1("A heatmap demo"),


  sliderInput("pixels", "size", value = 400, min = 100, max = 1000),

  selectInput("palette", "Palette", c("YlOrRd", "RdYlBu", "Greens", "Blues")),
  checkboxInput("cluster", "Apply clustering"),
  uiOutput("dynamic")
)
server <- function(input, output, session) {
  output$heatmap <- renderD3heatmap({
    d3heatmap(
      scale(mtcars),
      colors = input$palette,
      dendrogram = if (input$cluster) "both" else "none"
    ) })

  output$dynamic <- renderUI({

    d3heatmapOutput("heatmap", height = paste0(input$pixels, "px"))
  })

}
shinyApp(ui, server)
Другие вопросы по тегам