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

求2023年最新世界地图绘制推荐方案(替代rworldmap等遗留包)

当前推荐的R世界地图绘制方案(替代rworldmap/raster)

核心依赖包(均为当前维护的主流工具):

  • sf:空间数据处理标准库,替代旧版sp/rgdal/rgeos系列
  • ggplot2:主流绘图框架,完美支持sf格式空间数据
  • rnaturalearth:获取权威、更新的世界地图矢量数据(国家/大陆级别)
  • terra:官方推荐的栅格数据处理工具,替代raster

1. (国家, 数值)格式数据绘图示例

步骤1:安装并加载依赖

install.packages(c("sf", "ggplot2", "rnaturalearth", "rnaturalearthdata"))
library(sf)
library(ggplot2)
library(rnaturalearth)

步骤2:获取地图数据并合并用户数据

# 获取中等精度世界国家sf数据
world <- ne_countries(scale = "medium", returnclass = "sf")

# 模拟用户的国家-数值数据
set.seed(123)
user_data <- data.frame(
  country = sample(world$name, 50),
  value = runif(50, 0, 100)
)

# 合并地图与数据(匹配国家名称)
world_merged <- merge(world, user_data, by.x = "name", by.y = "country", all.x = TRUE)

步骤3:绘制地图(含投影、经纬线、红-绿配色)

ggplot() +
  # 绘制国家多边形,绑定数值到填充色
  geom_sf(data = world_merged, aes(fill = value), color = "white", linewidth = 0.1) +
  # 红-绿渐变配色,缺失值设为浅灰
  scale_fill_gradient(low = "green", high = "red", na.value = "gray90") +
  # 设置罗宾逊投影(适合世界地图的无偏投影)
  coord_sf(crs = "+proj=robin") +
  # 显示经纬线网格
  theme_minimal() +
  labs(fill = "指标数值", title = "世界国家指标分布图") +
  theme(
    panel.grid.major = element_line(color = "gray80", linetype = "dashed"),
    axis.text = element_text(size = 8)
  )

2. (纬度, 经度, 数值)网格点数据绘图示例(支持平滑/插值)

方案A:ggplot平滑热力图(快速可视化)

# 模拟网格点数据
set.seed(456)
grid_data <- data.frame(
  lon = runif(1000, -180, 180),
  lat = runif(1000, -60, 80),
  value = rnorm(1000, 50, 20)
)

# 绘制叠加底图的平滑热力图
ggplot() +
  # 世界地图底图
  geom_sf(data = world, fill = "gray90", color = "white", linewidth = 0.1) +
  # 平滑处理点数据,生成热力层
  stat_density2d(data = grid_data, aes(x = lon, y = lat, fill = stat(density)),
                 geom = "raster", contour = FALSE, alpha = 0.7) +
  # 红-蓝渐变配色
  scale_fill_gradient(low = "blue", high = "red") +
  # 设置温克尔三重投影
  coord_sf(crs = "+proj=wintri") +
  theme_minimal() +
  labs(fill = "数据密度", title = "网格点数据平滑分布图") +
  theme(
    panel.grid.major = element_line(color = "gray80", linetype = "dashed"),
    axis.text = element_text(size = 8)
  )

方案B:terra插值栅格(专业空间插值)

install.packages("terra")
library(terra)

# 将点数据转为terra矢量对象
point_vec <- vect(grid_data, geom = c("lon", "lat"))

# 创建1°分辨率的空栅格模板
empty_raster <- rast(point_vec, res = 1)

# IDW插值生成连续栅格
interp_raster <- interpolate(empty_raster, point_vec, method = "idw")

# 转为sf格式适配ggplot
interp_sf <- st_as_sf(interp_raster)

# 绘图
ggplot() +
  geom_sf(data = world, fill = "gray90", color = "white", linewidth = 0.1) +
  geom_sf(data = interp_sf, aes(fill = value), alpha = 0.7) +
  scale_fill_gradient(low = "blue", high = "red", na.value = NA) +
  coord_sf(crs = "+proj=robin") +
  theme_minimal() +
  labs(fill = "插值数值", title = "网格点数据插值分布图") +
  theme(
    panel.grid.major = element_line(color = "gray80", linetype = "dashed")
  )

关键功能设置说明

投影选择

常用世界地图投影(可直接填入coord_sf(crs = ...)):

  • 罗宾逊投影:"+proj=robin" 或 EPSG:54030(无面积/形状偏误,适合世界概览)
  • 温克尔三重投影:"+proj=wintri"(平衡面积、形状、距离误差)
  • 等距圆柱投影:"+proj=eqc"(经纬线正交,适合需要准确经纬度的场景)

经纬线显示

通过theme()中的panel.grid.major参数控制,示例中已设置为灰色虚线;若需显示经纬线刻度,确保axis.text不为空即可。


入门指引与文档

可通过R内置命令查看官方vignette:

  • sf空间数据基础:vignette("sf")
  • ggplot2空间绘图:vignette("sf")(含ggplot2与sf结合的用法)
  • rnaturalearth数据获取:vignette("rnaturalearth")
  • terra栅格处理:vignette("terra")

内容的提问来源于stack exchange,提问作者ivo Welch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:15:44