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

如何用ggplot2绘制带子区域的亚美尼亚Choropleth地图?

别发愁啦,我来帮你搞定亚美尼亚带子区域的 choropleth 地图!你遇到的问题很常见——maps包自带的世界地图数据里并没有亚美尼亚的细分行政区信息,所以只能画出整个国家的轮廓。下面给你一套完整的解决方案,一步步实现带子区域的地图绘制:

步骤1:获取亚美尼亚子区域的地理数据

我们需要用到更精细的行政区划数据,推荐用gadmtools包直接从GADM(全球行政区划数据库)获取亚美尼亚的一级行政区数据(正好对应你数据里的subregion)。先安装并加载包:

install.packages("gadmtools")
library(gadmtools)

然后获取并转换数据为ggplot兼容的格式:

# 获取亚美尼亚一级行政区数据
arm_adm1 <- gadm_load_countries("ARM", level = 1)
# 转换为ggplot可用的data.frame格式
arm_map_data <- fortify(arm_adm1)

如果你不想用gadmtools,也可以手动下载亚美尼亚ADM1级的shp文件,然后用sf包读取转换:

install.packages("sf")
library(sf)
# 替换为你下载的shp文件路径
arm_sf <- st_read("ARM_adm1.shp")
arm_map_data <- fortify(arm_sf)
步骤2:匹配你的业务数据和地理数据

首先要确保你的data_arm里的子区域名称和地理数据里的名称完全匹配(GADM里的NAME_1字段正好对应你列的subregion)。接下来合并数据:

# 从地理数据中提取区域名称和对应id
arm_regions <- data.frame(
  subregion = arm_adm1$NAME_1,
  id = rownames(arm_adm1@data)
)
# 合并你的业务数据和区域id
data_arm_merged <- merge(data_arm, arm_regions, by = "subregion", all.x = TRUE)
# 再和地图坐标数据合并
arm_map_data_merged <- merge(arm_map_data, data_arm_merged, by = "id", all.x = TRUE)

小提醒:你的原始data_arm里Value列有12个值,但subregion只有11个,记得检查数据是否多了一条哦!

步骤3:绘制带子区域的Choropleth地图

现在就可以用ggplot绘制出带子区域填充的地图了:

library(ggplot2)
ggplot(arm_map_data_merged, aes(x = long, y = lat, group = group, fill = Value)) +
  geom_polygon(color = "black", size = 0.25) +  # 绘制区域并添加边界线
  coord_map() +  # 保持地图投影正确
  labs(title = "亚美尼亚子区域数值分布图", fill = "数值") +
  theme_minimal() +
  theme(
    axis.text = element_blank(),  # 隐藏坐标轴文字
    axis.title = element_blank(),  # 隐藏坐标轴标题
    panel.grid = element_blank()  # 隐藏网格线,让地图更清晰
  )

这样就能得到每个子区域根据Value值填充颜色的亚美尼亚地图啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:40:18