如何在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
相关产品推荐
相关产品推荐

