Lägg till ett årsfilter: numerisk skjutreglage-inmatning
Skjutreglage kan användas för liknande ändamål som numeriska inmatningsfält, eftersom båda låter användaren välja ett tal.
Om det angivna startvärdet (argumentet value) är ett enstaka tal används skjutreglaget för att välja ett enskilt värde. Om startvärdet däremot är en vektor med två tal används skjutreglaget för att välja två värden i stället för ett.
Vi har redan sett att olika inmatningselement kan ha olika argument. Det kan vara svårt att komma ihåg exakt vilka argument varje inmatningsfunktion använder. Det enda sättet att ta reda på vilka argument en specifik inmatningsfunktion stöder är att läsa dess dokumentation eller hjälpfil.
Den här övningen är en del av kursen
Fallstudier: Bygg webbapplikationer med Shiny i R
Övningsinstruktioner
- Lägg till ett
sliderInput()i UI:t med ID:t "years" och etiketten "Years" (rad 14).- Sätt minimivärdet till det tidigaste året i datamängden och maximivärdet till det senaste året.
- Som standard ska reglagets ändpunkter vara satta till 1977 och 2002, så att endast data inom dessa år (inklusive) visas.
- Lägg till kod i servern så att de valda åren används för att filtrera
gapminder-datan och att bara poster inom det valda intervallet visas (rad 28).
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
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")),
selectInput("continents", "Continents",
choices = levels(gapminder$continent),
multiple = TRUE,
selected = "Europe"),
# Add a slider selector for years to filter
___("years", ___, ___, ___, ___)
),
mainPanel(
plotOutput("plot")
)
)
)
# Define the server logic
server <- function(input, output) {
output$plot <- renderPlot({
# Subset the gapminder data by the chosen years
data <- subset(gapminder,
continent %in% input$continents &
year >= ___$years[1] & year <= ___$years[2])
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)