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
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)