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

如何在ggplot2绘制的地图下方添加国家名称图例?

在ggplot2世界地图下方添加国家名称图例

要实现地图下方显示国家名称的图例,你可以通过添加辅助图层生成离散图例,再调整图例的位置与样式来达成需求。以下是具体实现方案:

实现代码

library(maps)
library(ggplot2)

# 你的数据集
trend_country_freq  <- structure(list(country = c("US", "CN", "KR", "IN", "AU", "GB", 
"JP"), n = c(25L, 20L, 12L, 5L, 2L, 1L, 1L), country_name = c("USA", 
"China", "South Korea", "India", "Australia", "UK", "Japan")), row.names = c(1L, 
2L, 3L, 4L, 5L, 7L, 8L), class = "data.frame")

world_map <- map_data("world")
world_map <- subset(world_map, region != "Antarctica")

ggplot(trend_country_freq) +
  # 绘制基础空白世界地图
  geom_map(
    data = world_map, map = world_map, aes(map_id = region),
    fill = "white", color = "#7f7f7f", size = 0.25
  ) +
  # 绘制带事件频次的国家填充
  geom_map(map = world_map, aes(map_id = country_name, fill = n), size = 0.25) +
  # 辅助图层:生成国家名称图例(点设为透明,不在地图上显示)
  geom_point(aes(x = NA, y = NA, color = country_name), alpha = 0) +
  # 调整事件频次的填充渐变图例
  scale_fill_gradient(low = "#fff7bc", high = "#cc4c02", name = "Total Cases") +
  # 配置国家名称的离散图例
  scale_color_discrete(name = "Countries") +
  # 确保地图显示完整范围
  expand_limits(x = world_map$long, y = world_map$lat) + 
  # 优化主题样式
  theme_minimal() +
  theme(
    panel.grid = element_blank(),
    axis.title = element_blank(),
    axis.ticks = element_blank(),
    axis.text = element_blank(),
    # 调整图例布局:频次图例右上,国家图例下方水平排列
    legend.position = c(1, 1),
    legend.justification = c(1, 1),
    legend.box = "vertical",
    legend.box.just = "bottom",
    legend.direction = "horizontal",
    # 调整图例间距,确保国家图例显示在地图下方
    legend.margin = margin(t = 30, b = 10),
    legend.box.margin = margin(b = 20)
  )

关键步骤说明

  1. 添加辅助图层:用geom_point创建一个完全透明(alpha=0)的点图层,通过color = country_name映射国家名称,这样不会在地图上显示多余元素,但会生成对应的离散图例。
  2. 配置图例样式:
    • scale_color_discrete设置国家图例的标题
    • 通过theme调整图例位置:将频次图例固定在右上角,国家图例设为水平排列并通过margin参数移到地图下方
  3. 优化主题:移除坐标轴、网格线等冗余元素,保持地图简洁。

如果希望国家图例的符号更贴合地图(比如用小矩形代替圆点),可以把geom_point替换为geom_rect,设置透明填充和对应边框:

geom_rect(aes(xmin=NA, xmax=NA, ymin=NA, ymax=NA, color = country_name), alpha=0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:30:59