在R Shiny中更改d3heatmapOutput()的高度



我正在使用R的d3heatmap库构建一个heatmap:https://cran.r-project.org/web/packages/d3heatmap/d3heatmap.pdf

我希望能够允许用户(通过UI)自由调整d3heatmapOutput()函数中的height =参数。

比较以下两个代码片段(只需将它们直接复制/粘贴到R Studio中),其中它们之间的唯一区别是d3heatmapOutput():中height =参数的值

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)

与。

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()这样的UI工具不起作用。同样,selectInput()也不起作用,例如:

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

其中CCD_ 9。不幸的是,这两个选项都不起作用,这让我怀疑我是否忽略了一个更简单、更优雅的选项。

在本例中,您可以使用滑块控制绘图的高度。这个想法是在服务器端渲染地图,并使用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)

相关内容

  • 没有找到相关文章

最新更新