2017-08-31 4 views
0

Ich habe alle Lösungen auf SO mit grid.arrange angeschaut, aber es erreicht nicht wirklich, was ich will.zeigen eine unbekannte Anzahl von Graphen in einem Raster RShiny

Nehmen wir an, ich habe eine Liste von grobs, die in einer reaktiven Umgebung in RShiny erzeugt werden.

ich eine mainPanel erstellen möchten, wo diese Grafiken auf 2 Spalten sind (bis zu diesem Punkt, es mit grid.arrange alles machbar ist), aber in der jede Zeile zu einem Element fluidRow entspricht.

würde All A Barebone Beispiel dafür sein

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({ 
     do.call(grid.arrange,c(graphsList(),ncol=2)) 
    }) 

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

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

die Graphen enden in einer einzigen Linie drückte auf, während ich sie zwischen den Zeilen aufgeteilt werden möchten.

Screenshot

Antwort

0

Sie müssen nur Höhenparameter für die plotOutput einzurichten:

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) 

Genau an diesem Ort:

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

ich es eingestellt haben, dass 600 Pixel bis (height = 600) aber Sie können wählen, was Sie wollen.

enter image description here

+0

dankt für Ihre Antwort, aber ich würde eine solche Lösung, wo es die Standard-Zeilenhöhe verwendet und erstellt eine neue fluidRow in der Benutzeroberfläche nach Bedarf. – Chapo

Verwandte Themen