如何用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
相关产品推荐
相关产品推荐

