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

Thêm màu cho biểu đồ: color input

Gói colourpicker cung cấp một color input, truy cập qua hàm colourInput(). Dù color input không thuộc gói shiny, nó hoạt động giống như các input khác.

Một color input có nhiều đối số mà bạn có thể khám phá, nhưng ở đây ta chỉ dùng các đối số cơ bản: inputId, labelvalue. Đối số value nhận một màu dùng làm giá trị khởi tạo. Màu có thể được chỉ định theo nhiều định dạng khác nhau, nhưng cách đơn giản nhất là dùng tên màu tiếng Anh như "red" hoặc "yellow".

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

Đoạn mã cho ứng dụng Shiny từ bài trước đã được cung cấp. Nhiệm vụ của bạn là thay các nút chọn (radio buttons) dùng để chọn màu bằng một color input. Cụ thể:

  • Nạp gói colourpicker.
  • Tìm hàm UI đang tạo các radio buttons để chọn màu và thay bằng một color input (dòng 12).
  • Color input này cần có ID "color", nhãn "Point color", và màu mặc định là "blue".

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.

# Load the colourpicker package
___

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),

      # Replace the radio buttons with a color input
      radioButtons("color", "Point color",
                   choices = c("blue", "red", "green", "black")),
      selectInput("continents", "Continents",
                  choices = levels(gapminder$continent),
                  multiple = TRUE,
                  selected = "Europe"),
      sliderInput("years", "Years",
                  min(gapminder$year), max(gapminder$year),
                  value = c(1977, 2002))
    ),
    mainPanel(
      plotOutput("plot")
    )
  )
)

# Define the server logic
server <- function(input, output) {
  output$plot <- renderPlot({
    data <- subset(gapminder,
                   continent %in% input$continents &
                   year >= input$years[1] & year <= input$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ã