Додайте фільтр за роком: повзунок числового діапазону
Повзунки можна використовувати для тих самих завдань, що й числові поля, адже обидва дають змогу користувачеві вибрати число.
Якщо початкове значення повзунка (аргумент value) — одне число, то повзунок слугує для вибору окремих чисел. Якщо ж початкове значення — вектор із двох чисел, тоді повзунок дозволяє вибрати два числа замість одного.
Ми вже бачили, що різні елементи введення мають різні аргументи. Пам'ятати їх усі складно. Дізнатися, які саме аргументи доступні для певної функції введення, можна лише з її документації або файлу довідки.
Ця вправа є частиною курсу
Case Studies: створення вебзастосунків із Shiny в R
Інструкції до вправи
- Додайте до UI
sliderInput()з ID "years" і міткою "Years" (рядок 14).- Установіть мінімальне значення як найраніший рік у наборі даних, а максимальне — як найпізніший рік у наборі даних.
- Типово межі повзунка мають бути 1977 і 2002, щоб відображалися лише дані між цими роками включно.
- Додайте код на сервері, щоб роки, обрані у вводі, використовувалися для підмножини даних
gapminder, і відображалися лише записи в межах цих років (рядок 28).
Інтерактивна практична вправа
Спробуйте виконати цю вправу, доповнивши цей зразок коду.
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)