在网格RShiny中显示未知数量的图形

时间:2017-08-31 09:52:22

标签: r ggplot2 shiny

我使用grid.arrange查看了SO上的所有解决方案,但它并没有真正达到我想要的效果。

假设我有一个在RShiny的反应环境中生成的grob列表。

我想创建一个mainPanel,其中这些图表位于2列(到那时为止,grid.arrange都可行)但每行对应一个{{1}元素。

这方面的准系统示例是

fluidRow

所有图形最终被挤压成一条线,而我希望它们在线条之间分开。

Screenshot

1 个答案:

答案 0 :(得分:0)

您只需要为plotOutput设置身高参数:

library(shiny)
library(gridExtra)
ui <- fluidPage(

  titlePanel("TEST"),
  sidebarPanel(width=3,
               actionButton(inputId = 'launchCalcButton',label = 'Launch Calc')
  ),
  mainPanel(
    uiOutput("resultsPlotUI")
  )
)

server <- function(input,output){

  graphsList <- eventReactive(input$launchCalcButton, {
    a <- lapply(1:10,function(i){
      return(
        ggplot(data = data.frame(a=rnorm(10),b=rnorm(10)),aes(x=a,y=b))
        +geom_point()
      )
    })
    return(a)
  })
  output$resultsPlot <- renderPlot({
    l <- length(graphsList())/2
    print(l)
    do.call(grid.arrange,c(graphsList(),ncol=2))
  })

  output$resultsPlotUI <- renderUI({
    fluidRow(
      column(12,
             plotOutput(
               outputId = 'resultsPlot', height = 600
             )
      )
    )
  })
}

app = shinyApp(ui,server)
runApp(app)

正好在这个地方:

 output$resultsPlotUI <- renderUI({
    fluidRow(
      column(12,
             plotOutput(
               outputId = 'resultsPlot', height = 600
             )
      )
    )
  })

我已将其设置为600像素(height = 600),但您可以选择任何您想要的内容。

enter image description here