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

如何在R的tmap中为英国大选结果配置自定义调色板?

解决tmap自定义党派固定颜色的问题

核心解决思路

要实现党派颜色固定且选区筛选后颜色不匹配,需做好两个关键处理:

  • 将first_party列转为因子类型,预先定义所有目标党派的水平(避免筛选后因子水平缺失导致颜色映射错位)
  • 在tm_polygons中使用命名向量明确指定各党派对应的颜色

修改后的完整代码

output$map <- renderTmap({
    # 预处理数据:固定党派因子水平,避免筛选后颜色映射混乱
    filtered_data <- filterConst()
    filtered_data$first_party <- factor(
      filtered_data$first_party,
      levels = c("SNP", "自由民主党", "工党", "保守党") # 需与数据中党派名称完全一致
    )
    
    # 定义自定义调色板:命名向量,键为党派名称,值为对应颜色
    party_colors <- c(
      "SNP" = "#FFFF00",          # 黄色
      "自由民主党" = "#FFA500",   # 橙色
      "工党" = "#FF0000",         # 红色
      "保守党" = "#0000FF"        # 蓝色
    )
    
    tm_shape(filtered_data) +
      tm_polygons(
        "first_party",
        title = "选举结果",
        popup.vars = c("获胜党派:" = "first_party", "议员" = "mp"),
        palette = party_colors,   # 应用自定义调色板
        zindex = 401,
        drop.levels = FALSE       # 关键:保留所有颜色映射规则,不受筛选后数据影响
      ) +
      tm_layout(frame = FALSE) +
      tmap_mode("view")
  })

关键注意事项

  • 确保levels中的党派名称与数据中first_party的取值完全匹配(大小写、空格都不能出错)
  • drop.levels = FALSE是核心:即使筛选后部分党派不在当前数据中,也会保留原有的颜色映射规则,不会重新分配颜色
  • 颜色值可使用十六进制代码,也可直接用R内置颜色名称(如"yellow"、"orange")

内容的提问来源于stack exchange,提问作者Oceanous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:15:57