LoslegenKostenlos loslegen

Füge einen Kontinentauswahl hinzu: select input

Wenn es viele Auswahlmöglichkeiten gibt, nehmen Optionsfelder (radio buttons) viel Platz ein und sind oft nicht ideal. Select-Inputs – auch „Dropdown-Listen“ genannt – können ebenfalls verwendet werden, um Nutzer*innen eine Option aus einer Liste wählen zu lassen, aber in kompakterer Form. Bei einem Select-Input erscheinen alle Optionen in einer scrollbaren Liste, sodass er sich auch bei vielen Auswahlmöglichkeiten eignet.

Ähnlich wie Optionsfelder haben Select-Inputs die Parameter choices und selected. Zusätzlich verfügen Select-Inputs über das Argument multiple, das, wenn es auf TRUE gesetzt ist, die Auswahl mehrerer Werte erlaubt.

Der Code für die Shiny-App aus der letzten Übung ist mit kleinen Anpassungen vorgegeben.

Diese Übung ist Teil des Kurses

Fallstudien: Webanwendungen mit Shiny in R erstellen

Kurs anzeigen

Anleitung zur Übung

  • Füge dem UI ein selectInput() mit der ID "continents" und dem Label "Continents" hinzu, wobei der Standardkontinent auf "Europe" gesetzt ist.
    • Die Auswahl in der Liste soll alle verschiedenen Kontinente enthalten, die im gapminder-Datensatz vorkommen.
    • Erlaube, dass mehrere Kontinente gleichzeitig ausgewählt werden können.
  • Ergänze Code im Server, sodass nur Daten für die ausgewählten Kontinente angezeigt werden, indem du den gapminder-Datensatz subsettest (Zeile 23).

Interaktive Übung

Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      textInput("title", "Title", "GDP vs life exp"),
      numericInput("size", "Point size", 1, 1),
      checkboxInput("fit", "Add line of best fit", FALSE),
      radioButtons("color", "Point color",
                   choices = c("blue", "red", "green", "black")),
      # Add a continent dropdown selector
      ___(___, ___,
                  choices = levels(___),
                  multiple = ___,
                  selected = ___)
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

# Define the server logic
server <- function(input, output) {
  output$plot <- renderPlot({
    # Subset the gapminder dataset by the chosen continents
    data <- subset(gapminder,
                   ___ %in% ___$continents)

    p <- ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point(size = input$size, col = input$color) +
      scale_x_log10() +
      ggtitle(input$title)
    
    if (input$fit) {
      p <- p + geom_smooth(method = "lm")
    }
    p
  })
}

shinyApp(ui = ui, server = server)
Code bearbeiten und ausführen