我使用grid.arrange
查看了SO上的所有解决方案,但它并没有真正达到我想要的效果。
假设我有一个在RShiny的反应环境中生成的grob列表。
我想创建一个mainPanel
,其中这些图表位于2列(到那时为止,grid.arrange
都可行)但每行对应一个{{1}元素。
这方面的准系统示例是
fluidRow
所有图形最终被挤压成一条线,而我希望它们在线条之间分开。
答案 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
),但您可以选择任何您想要的内容。