rnaturalearth中比利时显示为三个地区,如何合并为单个国家实体?
解决rnaturalearth中比利时拆分为三个地区的问题
方案1:直接使用国家层级地理数据(最简单)
如果你的需求是绘制国家级的欧洲地图,不需要细分到比利时的大区,直接调用ne_countries()获取国家边界即可,这样比利时会作为一个完整的国家出现:
library(rnaturalearth) library(rnaturalearthdata) library(sf) library(ggplot2) # 获取欧洲国家级矢量数据(returnclass指定为sf方便ggplot绘图) europe_countries <- ne_countries(continent = "europe", returnclass = "sf", scale = "medium") # 筛选出比利时(可直接用于后续分级统计绘图) belgium_full <- europe_countries %>% filter(name == "Belgium") # 示例绘图(替换fill字段为你的数据指标) ggplot(europe_countries) + geom_sf(aes(fill = name)) + theme_minimal()
方案2:合并比利时的三个大区(适用于需要地区级数据的场景)
如果必须使用地区级(adm1)数据(比如要和其他国家的一级行政区数据匹配),可以手动合并比利时的三个大区多边形:
library(rnaturalearth) library(rnaturalearthdata) library(sf) library(dplyr) # 获取比利时的地区级数据 belgium_adm1 <- ne_states(country = "belgium", returnclass = "sf") # 合并三个大区的几何图形,生成完整的比利时边界 belgium_merged <- belgium_adm1 %>% st_union() %>% # 合并多边形 st_sf(name = "Belgium", geometry = .) # 转为sf对象,设置国家名称 # 整合到全欧洲地区级数据中: # 1. 获取全欧洲地区级数据 europe_adm1 <- ne_states(continent = "europe", returnclass = "sf") # 2. 移除原有的比利时三个大区 europe_adm1_clean <- europe_adm1 %>% filter(!(country == "Belgium" & name %in% c("Brussels", "Flanders", "Wallonia"))) # 3. 加入合并后的比利时 europe_adm1_fixed <- bind_rows(europe_adm1_clean, belgium_merged) # 此时你的数据中"Belgium"条目可直接关联修正后的sf对象,不会出现留白 # 示例绘图(假设你的数据框为data_df,包含country和value字段) ggplot(europe_adm1_fixed) + geom_sf(aes(fill = value), data = left_join(europe_adm1_fixed, data_df, by = c("name" = "country"))) + theme_minimal()
问题原因说明
rnaturalearth的ne_states()函数返回的是各国的**一级行政区(adm1)**数据,而比利时的一级行政区恰好是布鲁塞尔、佛兰德斯、瓦隆三个大区,所以会被拆分为独立条目。如果不需要行政区细分,优先使用ne_countries()的国家级数据即可避免这个问题。
内容的提问来源于stack exchange,提问作者Monika
相关产品推荐
相关产品推荐

