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, label và value. Đố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
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)