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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 05:13:13