基于R与rnaturalearth:构建分面地图并移除塞浦路斯内部边界
优化后的欧洲分面色彩地图代码方案
以下是精简后的实现代码,通过链式操作整合数据处理与地图绘制流程,同时高效处理塞浦路斯内部边界问题:
# 加载所需包 library(rnaturalearth) library(sf) library(tidyverse) # 1. 获取并预处理欧洲地图数据(含塞浦路斯边界合并) europe_map <- ne_countries(continent = "Europe", returnclass = "sf") %>% # 过滤保留主权国家(可按需调整条件) filter(sovereignt != "Antarctica") %>% # 合并塞浦路斯内部多区块边界 group_by(admin) %>% summarise(geometry = st_union(geometry), .groups = "drop") %>% # 重命名列以匹配业务数据格式 rename(country = admin) # 2. 模拟年份占比数据(替换为你的真实业务数据) set.seed(123) year_data <- expand_grid( country = europe_map$country, year = c(2018, 2019, 2020, 2021) ) %>% mutate(value = runif(n(), min = 0, max = 100)) # 3. 合并数据并绘制分面地图 europe_map %>% left_join(year_data, by = "country") %>% ggplot() + geom_sf(aes(fill = value), color = "white", size = 0.1) + # 按年份分面,设置列数 facet_wrap(~year, ncol = 2) + # 配置色彩渐变与图例 scale_fill_viridis_c(option = "plasma", name = "占比(%)") + # 精简主题样式 theme_minimal() + theme( axis.text = element_blank(), axis.title = element_blank(), panel.grid = element_blank(), legend.position = "bottom" )
关键优化点说明
- 链式操作简化流程:用
%>%将地图获取、边界处理、数据合并、绘图全流程串联,避免创建冗余中间变量,逻辑更连贯。 - 一站式处理塞浦路斯边界:在地图预处理阶段,直接通过
group_by+st_union合并塞浦路斯的多区块几何图形,省去单独提取、合并再拼接的繁琐步骤。 - 提前统一数据格式:获取地图数据时直接重命名国家列,后续与业务数据合并无需重复调整列名;同时提前筛选欧洲主权国家,减少无效数据干扰。
- 精简绘图配置:用
theme_minimal快速去除冗余元素,再针对性隐藏坐标轴、网格线,让地图视觉焦点集中在色彩与国家区域上。
内容的提问来源于stack exchange,提问作者larry77
相关产品推荐
相关产品推荐

