2017-05-05 1 views
0

Ich versuche, meine erste Shiny App zu erstellen und ich versuche grundsätzlich, die App zwei einfache Histogramme zu zeichnen, aber mit einem Input Button kann der Benutzer wählen, ob er die beiden Histogramme nebeneinander sehen will (Horizontal) oder untereinander (vertikal).Wie kann ich das Layout reaktiv über den Eingabeknopf in Shiny App ändern?

Ich habe versucht, den Code weiter unten als Versuch zu schreiben, meinen Gedankenprozess zu erklären, als tatsächlich zu hoffen, dass es funktionieren würde.

Jede Hilfe wird geschätzt, danke!

library(shiny) 

ui <- fluidPage(
radioButtons('layout', 'Layout:', choices=c('Vertically', 'Horizontally'), inline=TRUE), 
sliderInput(inputId = "num", 
      label = "Choose a number", 
      value = 25, min = 1, max = 100), 
plotOutput("hist1"), 
plotOutput("hist2")) 

server <- function(input,output) { 

if (input$layout == "Horizontally") { 
    output$hist1<-fluidRow(
    column(3,plotOutput(hist(rnorm(input$num))))) 
    output$hist2<-column(3,plotOutput(hist(rnorm(input$num)))) 
} 
else if (input$layout == "Vertically") { 
    output$hist1<-fluidRow(
    column(3,plotOutput(hist(rnorm(input$num))))) 
    output$hist2<-fluidRow(
    column(3,plotOutput(hist(rnorm(input$num))))) 
} 

} 

shinyApp(ui=ui, server=server) 

Antwort

0

Sie können renderUI verwenden Sie das Layout in Abhängigkeit von der Eingabe zu erstellen, und uiOutput das Ergebnis anzuzeigen:

ui <- fluidPage(
    radioButtons('layout', 'Layout:', choices=c('Vertically', 'Horizontally'), inline=TRUE), 
    sliderInput(inputId = "num", 
       label = "Choose a number", 
       value = 25, min = 1, max = 100), 
    uiOutput("plots")) 

server <- function(input,output) { 
    output$hist1<-renderPlot(hist(rnorm(input$num))) 
    output$hist2<-renderPlot(hist(rnorm(input$num))) 
    output$plots<-renderUI(if (input$layout == "Horizontally") { 
    fluidRow(column(3,plotOutput("hist1")), 
      column(3,plotOutput("hist2"))) 
    } 
    else if (input$layout == "Vertically") { 
     fluidRow(plotOutput("hist1"),plotOutput("hist2")) 
     }) 
} 

shinyApp(ui=ui, server=server) 
+0

Großartig, danke! Betrachtet man die Dinge immer nebeneinander, würde es eine Möglichkeit geben, stattdessen über die Eingabetaste zu wählen, wenn ich nur 1 Histogramm oder beides anzeigen möchte? – lc23

+0

Ja, ändern Sie einfach den Inhalt der renderUI, um sie an Ihre Bedürfnisse anzupassen – HubertL

Verwandte Themen