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

如何使用R在地图上可视化各选区脱欧/留欧得票差值

英国脱欧公投选区得票差可视化修复方案

原代码核心错误

  • 未计算脱欧/留欧得票差值,错误将两个变量同时传入fill映射,不符合ggplot2映射规则,后者传入的remain_hanretty不会被识别为填充映射参数
  • 混淆fill(面填充)和colour(线条/点颜色)美学标度,后续设置的scale_colour_brewer、scale_color_gradient仅控制选区边框颜色,完全不会作用于选区填充色
  • 同时加载两个互相冲突的颜色标度,且未使用适配正负值的发散配色逻辑,无法实现"留欧-持平-脱欧"的三色渐变效果
  • 数据处理阶段的group_by步骤无实际聚合作用,属于冗余代码
  • 错将适用于离散变量的scale_colour_brewer用在连续数值的填充映射上,无法正常渲染配色

修正后可直接运行的代码

library(tidyverse)
library(sf)
library(parlitools)

# 读取处理数据,剔除北爱尔兰
data_gb <- bes_2019 %>%
  filter(region != "Northern Ireland")

# 提取所需字段,计算得票差值:正值=脱欧派得票占优,负值=留欧派得票占优
voting <- data_gb %>%
  select(constituency_name, region, ons_const_id, leave_hanretty, remain_hanretty) %>%
  mutate(vote_diff = leave_hanretty - remain_hanretty)

# 关联选区边界空间数据
voting <- cons_outline %>%
  inner_join(voting, by = c("pcon19cd" = "ons_const_id"))

# 绘图
voting %>%
  ggplot() + 
  geom_sf(aes(fill = vote_diff), colour = "#eeeeee", size = 0.01) +
  coord_sf(crs = 27700, datum = NA) +
  # 发散配色设置:中点对应差值0(两派持平),调用BrBG棕-蓝发散色板适配连续值
  scale_fill_distiller(
    palette = "BrBG",
    direction = 1,
    midpoint = 0,
    name = "得票差值\n(脱欧-留欧)"
  ) +
  theme_minimal()

如果需要自定义配色,可将scale_fill_distiller替换为scale_fill_gradient2,手动指定低(留欧)、中(持平)、高(脱欧)对应的色值即可。

效果参考

  • 原代码实际运行输出:
    实际运行结果
  • 目标实现效果:
    目标效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 06:06:26