具有动态高度的闪亮 renderPlot

shiny renderPlot with dynamic height

问题 我想动态更改渲染图的高度,这样如果它包含很多数据点,就会将更多 space 分配给该图。然后应该简单地移动情节下方的内容。

renderPlotheight 参数可用于此,但随后情节溢出到下一个元素,我想避免这种情况。

我可以通过使用 uiOutput 来规避它,但我想知道我是否可以在 没有 的情况下获得相同的行为 renderUI

预期结果

我希望在地块大小发生变化时移动地块下方的 div没有 使用 renderUI

截图

Div不动

溢出进入div 代码

library(shiny)
library(ggplot2)

ui <- fluidPage(
   fluidRow(
      column(width = 2, sliderInput("n", "Number of Rows:", 1, 49, 10)),
      column(width = 10, plotOutput("plot"))
   ),
   fluidRow( ## the plot oevrflows into this div when the plot grows
      column(width = 12, div(style = "background:red; height: 100px"))
   ),
   fluidRow(
    column(width = 10, offset = 2, uiOutput("ui"))
   ),
   fluidRow( ## this div is properly moved down as the plot grows
      column(width = 12, div(style = "background:red; height: 100px"))
   )
)

server <- function(input, output, session) {
   data <- reactive(data.frame(id = factor(1:input$n, 1:input$n), 
                               y  = rpois(input$n, 200)))
   output$plot <- renderPlot(
     qplot(id, y, geom = "col", fill = y, data = data()) + 
        coord_flip(), height = function() 20 * NROW(data())
   )

   output$ui <- renderUI(plotOutput("plot2", height = 20 * NROW(data())))

   output$plot2 <- renderPlot(
     qplot(id, y, geom = "col", fill = y, data = data()) + 
        coord_flip()
   )
}


可以在ui部分写plotOutput("plot", height = "auto")。 plotOutput 的默认高度固定为 400 像素。通过设置 height="auto" 绘图会自动调整内容。