Shiny App中动态设置ggvis的viridis调色板颜色数量
动态设置ggvis中viridis调色板的颜色数量
可以用命名向量建立选项与颜色数量的映射,这种方式简洁易维护,后续新增选项时只需扩展向量即可:
vis <- reactive({ # 建立选项到颜色数量的映射关系 color_n <- c( "Region" = 6, "Language" = 30, "Institution" = 100 ) # 根据当前用户选择获取对应颜色数量 selected_n <- color_n[input$z] dataset %>% ggvis(x = ~Date, y = ~mentions, fill = ~get(input$z)) %>% layer_points(size := 50, size.hover := 200, fillOpacity := input$alpha, fillOpacity.hover := 1, key := ~Filename) %>% scale_ordinal("fill", range = viridis(n = selected_n)) %>% add_tooltip(speech_tooltip, "hover") %>% add_axis("x", title = "Date") %>% add_axis("y", title = paste0("Mentions of `", req(input$keyword), "'")) })
如果需要更灵活的条件判断逻辑,也可以用dplyr::case_when实现:
vis <- reactive({ selected_n <- case_when( input$z == "Region" ~ 6, input$z == "Language" ~ 30, input$z == "Institution" ~ 100, # 可选:设置默认值,应对未匹配的异常情况 TRUE ~ 10 ) dataset %>% ggvis(x = ~Date, y = ~mentions, fill = ~get(input$z)) %>% layer_points(size := 50, size.hover := 200, fillOpacity := input$alpha, fillOpacity.hover := 1, key := ~Filename) %>% scale_ordinal("fill", range = viridis(n = selected_n)) %>% add_tooltip(speech_tooltip, "hover") %>% add_axis("x", title = "Date") %>% add_axis("y", title = paste0("Mentions of `", req(input$keyword), "'")) })
补充说明
- 命名向量方式适合固定选项的映射场景,修改和扩展成本极低;
case_when方式支持更复杂的多条件判断,比如后续如果需要根据数据集实际类别数动态调整,只需替换固定数值为n_distinct(dataset[[input$z]])即可;- 两种方案都能实现根据用户选择动态匹配viridis调色板的颜色数量,完全符合你的需求。
内容的提问来源于stack exchange,提问作者jeanmichop
相关产品推荐
相关产品推荐

