НачатьНачать бесплатно

Добавляем фильтр по годам: числовой слайдер

Слайдер, как и числовое поле ввода, позволяет пользователю выбирать числовые значения.

Если начальное значение слайдера (аргумент value) — одно число, то слайдер используется для выбора одного значения. Если же начальное значение — вектор из двух чисел, то слайдер позволяет выбрать два числа вместо одного.

Мы уже убедились, что у разных элементов ввода могут быть разные аргументы. Запомнить точный набор аргументов для каждой функции ввода непросто. Единственный надёжный способ узнать, какие аргументы доступны для конкретной функции, — обратиться к её документации или файлу справки.

Это упражнение является частью курса

Примеры использования: создание веб-приложений с Shiny в R

Посмотреть курс

Инструкции к упражнению

  • Добавьте sliderInput() в UI с идентификатором "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)
Редактировать и запускать код