如何用ggplot2绘制科索沃指定行政区的Choropleth地图?
解决科索沃行政区Choropleth地图制作问题
你用map_data("world")只能获取国家级别的地理数据,没有科索沃的细分行政区信息,所以找不到目标行政区的名称。下面是具体的解决方案:
步骤1:安装并加载必要的包
需要用到处理空间数据的sf、绘图的ggplot2、数据处理的dplyr,以及获取行政区边界的gadm:
install.packages(c("sf", "ggplot2", "dplyr", "gadm")) library(sf) library(ggplot2) library(dplyr) library(gadm)
步骤2:获取科索沃行政区边界数据
用gadm_sf函数获取科索沃的一级行政区(对应你需要的区域)空间数据:
# 获取科索沃一级行政区数据 kosovo_adm <- gadm_sf(country = "XK", level = 1) # 查看当前行政区名称,确认和目标列表的匹配情况 print(kosovo_adm$NAME_1)
步骤3:统一行政区名称
数据源里的名称可能和你使用的拼写有差异(比如Prishtinë对应Pristina,Pejë对应Pecki),需要统一名称:
# 重命名行政区以匹配你的目标列表 kosovo_adm <- kosovo_adm %>% mutate(NAME_1 = case_when( NAME_1 == "Prishtinë" ~ "Pristina", NAME_1 == "Pejë" ~ "Pecki", NAME_1 == "Gjakovë" ~ "Gjakova", TRUE ~ NAME_1 )) # 筛选你需要的目标行政区 target_regions <- c("Ferizaj", "Gjakova", "Gjilan", "Mitrovica", "Pecki", "Pristina", "Prizren") kosovo_subset <- kosovo_adm %>% filter(NAME_1 %in% target_regions)
步骤4:合并数据并绘制Choropleth地图
假设你有包含行政区和对应数值的数据框,将其与地理数据合并后绘图:
# 示例数据,请替换成你的实际数据 region_metrics <- data.frame( Region = target_regions, Value = c(15, 22, 18, 28, 25, 32, 20) ) # 合并空间数据和数值数据 kosovo_merged <- kosovo_subset %>% left_join(region_metrics, by = c("NAME_1" = "Region")) # 绘制地图 ggplot(kosovo_merged) + geom_sf(aes(fill = Value), color = "white", linewidth = 0.5) + geom_sf_text(aes(label = NAME_1), size = 3, color = "black") + scale_fill_gradient(low = "#f0f8ff", high = "#003366") + theme_minimal() + labs(title = "科索沃行政区指标分布图", fill = "指标数值") + theme( axis.text = element_blank(), axis.title = element_blank(), panel.grid = element_blank() )
备选方案:手动导入Shapefile
如果gadm包无法正常获取数据,可以直接下载科索沃一级行政区的Shapefile,用st_read()读取:
# 替换为你下载的Shapefile路径 kosovo_shp <- st_read("path/to/gadm41_XK_1.shp")
内容的提问来源于stack exchange,提问作者silent_hunter
相关产品推荐
相关产品推荐

