Bắt đầu ngayBắt đầu miễn phí

Thêm bộ lọc theo năm: thanh trượt số

Thanh trượt (slider) có thể dùng cho mục đích tương tự như ô nhập số, vì cả hai đều cho phép người dùng chọn một con số.

Nếu giá trị khởi tạo (đối số value) của thanh trượt là một số đơn, thì thanh trượt sẽ dùng để chọn từng số đơn lẻ. Tuy nhiên, nếu giá trị khởi tạo là một vector gồm hai số, thì thanh trượt sẽ dùng để chọn hai số thay vì chỉ một giá trị duy nhất.

Chúng ta đã thấy các thành phần nhập liệu khác nhau có thể có các đối số khác nhau. Thật khó để nhớ chính xác mỗi loại nhập liệu dùng những đối số nào. Cách duy nhất để biết bạn có thể dùng những đối số nào với một hàm nhập liệu cụ thể là xem tài liệu hoặc tệp trợ giúp của nó.

Bài tập này là một phần của khóa học

Nghiên cứu tình huống: Xây dựng ứng dụng web với Shiny trong R

Xem khóa học

Hướng dẫn bài tập

  • Thêm một sliderInput() vào UI với ID "years" và nhãn "Years" (dòng 14).
    • Đặt giá trị nhỏ nhất là năm sớm nhất trong tập dữ liệu và giá trị lớn nhất là năm muộn nhất trong tập dữ liệu.
    • Mặc định, hai đầu mút của thanh trượt phải được đặt là 1977 và 2002, để chỉ hiển thị dữ liệu trong khoảng hai năm này (bao gồm cả hai đầu).
  • Thêm mã vào server để các năm được chọn từ input dùng để lọc dữ liệu gapminder, và chỉ các bản ghi trong các năm đó mới được hiển thị (dòng 28).

Bài tập tương tác thực hành trực tiếp

Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.

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)
Chỉnh sửa và Chạy Mã