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

如何为ggplot2绘制的地图添加含区域名称的自定义图例?

自定义地图图例实现方案

需求

用ggplot2绘制地图时,基于连续字段(如实际代码中的Y1)为区域着色,替换默认的连续渐变图例,改为显示区域名称、对应数值及匹配地图颜色的自定义图例。

场景重现(用公开数据测试)

先通过公开地理数据模拟你的场景:

library(ggplot2)
library(sf)
library(gridExtra)

# 读取地理数据(替换为你的自有shapefile/geojson路径)
map <- read_sf("你的地理文件路径")
# 测试时可使用西班牙公开地理数据,字段对应名称为`name`、失业率字段为`unemp_rate`

实现步骤

1. 绘制不带默认图例的地图

# 基础地图(隐藏默认图例)
map_plot <- ggplot(map, aes(geometry = geometry, fill = unemp_rate)) +
  geom_sf(color = "white", show.legend = FALSE) +
  # 对应你实际代码的渐变配色
  scale_fill_gradient2(low = "brown", high = "green", midpoint = median(map$unemp_rate)) +
  theme_bw() +
  theme(
    axis.title = element_blank(),
    axis.text = element_blank(),
    axis.ticks = element_blank(),
    plot.margin = margin(10, 10, 10, 10)
  )

2. 生成自定义图例

单独用ggplot绘制表格样式的图例,确保颜色与地图匹配:

# 整理图例数据:提取名称、数值,计算对应颜色
legend_data <- map %>%
  st_drop_geometry() %>% # 移除地理属性,保留数据列
  select(name, unemp_rate) %>%
  arrange(unemp_rate) %>% # 按数值排序(可选,优化视觉效果)
  mutate(
    # 根据渐变规则计算每个区域的匹配颜色
    fill_color = scales::gradient_n_pal(c("brown", "green"))(scales::rescale(unemp_rate, to = c(0,1))),
    name = factor(name, levels = name) # 锁定排序,避免图例乱序
  )

# 绘制自定义图例
custom_legend <- ggplot(legend_data, aes(y = name)) +
  # 绘制颜色块
  geom_tile(aes(x = 1, fill = fill_color), width = 0.8) +
  # 添加数值标签
  geom_text(aes(x = 1.8, label = sprintf("%.1f", unemp_rate)), size = 3) +
  # 添加区域名称标签
  geom_text(aes(x = 0.2, label = name), hjust = 0, size = 3) +
  scale_fill_identity() + # 使用已计算的颜色值,不生成新图例
  theme_void() +
  theme(
    plot.margin = margin(10, 10, 10, 10),
    plot.title = element_text(hjust = 0.5, size = 10, face = "bold")
  ) +
  labs(title = "失业率(%)") +
  coord_cartesian(xlim = c(0, 2)) # 控制图例的宽度范围

3. 拼接地图与图例

用grid.arrange组合两者,调整宽度比例让布局更协调:

gridExtra::grid.arrange(map_plot, custom_legend, ncol = 2, widths = c(3, 1))

适配你的实际代码

只需将上述代码中的unemp_rate替换为你的Y1字段,同时可根据需求调整配色方案、文字大小、图例宽度比例等参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:59:57