You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:25:16