Dodaj selektor kontynentów: pole wyboru
Gdy opcji do wyboru jest wiele, przyciski radiowe mogą zajmować dużo miejsca i nie być najlepszym rozwiązaniem. Pola wyboru – zwane też „listami rozwijanymi" – również umożliwiają użytkownikowi wybranie jednej z dostępnych opcji, ale w bardziej zwartej formie. Wszystkie opcje wyświetlają się na przewijalnej liście, więc to rozwiązanie sprawdza się nawet przy dużej liczbie pozycji.
Podobnie jak przyciski radiowe, pola wyboru mają parametry choices oraz selected. Dodatkowo posiadają argument multiple, który po ustawieniu na TRUE umożliwia wybranie więcej niż jednej wartości jednocześnie.
Kod aplikacji Shiny z poprzedniego ćwiczenia został udostępniony z niewielkimi modyfikacjami.
To ćwiczenie jest częścią kursu
Studia przypadków: tworzenie aplikacji webowych w Shiny w R
Instrukcje do ćwiczenia
- Dodaj
selectInput()do interfejsu użytkownika z identyfikatorem "continents" i etykietą "Continents", ustawiając domyślny kontynent na "Europe".- Jako opcje na liście ustaw wszystkie kontynenty występujące w zbiorze danych gapminder.
- Pozwól użytkownikowi jednocześnie wybrać kilka kontynentów.
- Dodaj kod do serwera tak, aby wyświetlane były tylko dane dla wybranego kontynentu – poprzez podzbiór zbioru danych gapminder (wiersz 23).
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
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)