如何使用ggplot2的map_data()绘制特定国家底图及替代多边形获取函数
使用ggplot2的map_data()创建特定国家底图(以塞舌尔为例)
要基于map_data()生成特定国家的底图,核心是先获取世界地图数据,再筛选目标国家的地理多边形:
- 加载必要的包:
ggplot2用于绘图,dplyr用于数据筛选 - 调用
map_data("world")获取世界地图的多边形数据,通过filter()筛选出塞舌尔(注意内置的国家名称是"Seychelles") - 用
geom_polygon()绘制多边形,配合coord_fixed()保持地图比例,theme_void()简化样式
示例代码:
library(ggplot2) library(dplyr) # 获取并筛选塞舌尔的地图数据 seychelles_map <- map_data("world") %>% filter(region == "Seychelles") # 绘制背景底图 ggplot() + geom_polygon(data = seychelles_map, aes(x = long, y = lat, group = group), fill = "#a8d1d1", color = "#333333") + coord_fixed(ratio = 1) + theme_void()
注意:如果筛选不到目标国家,可通过
unique(map_data("world")$region)查看所有内置的国家名称,确认拼写是否匹配。
其他获取国家多边形数据的函数/包
除了map_data(),还有几个常用的工具可以获取更精准或细分的地理数据:
- rnaturalearth包:提供高精度的全球地理数据,支持
sf空间格式,适合现代空间分析:
library(rnaturalearth) library(sf) # 获取塞舌尔的sf格式数据(scale参数控制精度:110=低精度,10=高精度) seychelles_sf <- ne_countries(country = "Seychelles", returnclass = "sf", scale = 10) # 用ggplot绘制sf格式数据 ggplot(seychelles_sf) + geom_sf(fill = "#a8d1d1", color = "#333333") + theme_void()
- maps包的map()函数:基础绘图系统的直接绘制方法,适合快速生成简单地图:
library(maps) map("world", regions = "Seychelles", fill = TRUE, col = "#a8d1d1")
- GADMTools包:提供多级行政区划数据(国家、省、市等),通过ISO国家代码调用:
library(GADMTools) # SYC是塞舌尔的ISO 3166-1代码,level=0代表国家层级 seychelles_gadm <- gadm_sf("SYC", level = 0) ggplot(seychelles_gadm) + geom_sf(fill = "#a8d1d1", color = "#333333") + theme_void()
内容的提问来源于stack exchange,提问作者Andre230
相关产品推荐
相关产品推荐

