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

如何用ggplot+maptools+ggmap实现基于产假数据的渐变色彩地图?

按产假天数实现地图颜色渐变的解决方案

你之前用borders()函数无法关联数据框中的产假数值,因为这个函数仅用于绘制固定样式的边界。正确的做法是先获取带地理信息的世界地图数据,再与你的产假数据合并,最后通过geom_map()实现按数值填充颜色。

以下是修改后的完整代码:

pacman::p_load(ggplot2, dplyr)

df <- tribble( ~ country,   ~ maternity_leave,
               "Argentina",               390,
               "Bahamas",                 390,
               "Barbados",                360,
               "Belize",                  420,
               "Bolivia",                 390,
               "Brazil",                  510,
               "Chile",                   540,
               "Colombia",                540,
               "Costa Rica",              510,
               "Dominican Republic",      420,
               "Ecuador",                 360,
               "El Salvador",             480,
               "Guatemala",               360,
               "Guyana",                  390,
               "Haiti",                   360,
               "Honduras",                240,
               "Jamaica",                 240,
               "Mexico",                  360,
               "Nicaragua",               360,
               "Panama",                  420,
               "Paraguay",                540,
               "Peru",                    420,
               "Suriname",                480,
               "Trinidad and Tobago",     420,
               "Venezuela",               780)

# 获取世界地图数据
world_map <- map_data("world")

# 合并地图数据与产假数据(确保国家名称匹配)
map_data_merged <- world_map %>%
  inner_join(df, by = c("region" = "country"))

# 绘制带颜色渐变的地图
ggplot() +
  geom_map(data = map_data_merged, map = world_map,
           aes(x = long, y = lat, map_id = region, fill = maternity_leave)) +
  coord_map() +  # 保持地图投影正确,避免变形
  scale_fill_viridis_c(option = "plasma", name = "产假天数(天)") +  # 色盲友好型渐变配色
  labs(x = "经度(十进制)", y = "纬度(十进制)") +
  theme(panel.border = element_blank(),
        panel.grid.major = element_line(colour = "grey80"),
        panel.grid.minor = element_blank(),
        axis.text = element_text(size = 8))

关键说明:

  1. 地图数据结构化:map_data("world")返回包含国家经纬度、区域名称的标准化数据框,能直接和业务数据关联,这是borders()做不到的。
  2. 数据过滤与合并:用inner_join只保留你数据框中存在的国家,避免无关地理信息干扰。
  3. 颜色渐变自定义:
    • 若需要对称渐变效果(比如以中位数为中心),可替换配色代码为:scale_fill_gradient2(low = "blue", mid = "white", high = "red", midpoint = median(df$maternity_leave), name = "产假天数(天)")
    • scale_fill_viridis_c是专业可视化场景常用的色盲友好型配色,可读性更强。
  4. 坐标系校正:coord_map()确保地图不会因为ggplot默认的笛卡尔坐标系而拉伸变形,保持地理形状准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:15:59