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

如何在R语言中使用rnaturalearth绘制带坐标点的世界地图?

解决方案

要把你的经纬度点绘制到Mollweide投影的世界地图上,核心是将普通经纬度数据转换为与底图同坐标系的sf对象,具体步骤如下:

1. 完善数据框(可选但推荐)

先把object列加入数据框,方便后续区分不同观测对象:

object = c("yacht", "fishingboat", "whale")
long = c(-123.02676, -123.39763, -123.25103)
lat = c(38.22033, 38.05059, 38.32280)
df = data.frame(object, long, lat)

2. 转换数据格式并统一投影

你的底图已经转换为Mollweide投影(+proj=moll),需要把经纬度数据转为sf对象,并同步投影:

library(rnaturalearth)
library(sf)
library(ggplot2)

# 创建并转换世界地图投影
world <- ne_countries(scale = "small", returnclass = "sf") %>%
  st_transform(crs = "+proj=moll")

# 将普通经纬度转为sf点对象:先指定原始CRS为WGS84(EPSG:4326),再同步底图投影
df_sf <- st_as_sf(df, coords = c("long", "lat"), crs = 4326) %>%
  st_transform(crs = "+proj=moll")

3. 绘制带有点的世界地图

在ggplot中叠加底图和点,还可以添加颜色区分、文本标注增强可读性:

ggplot() +
  # 绘制世界地图底图,自定义填充和边框色
  geom_sf(data = world, fill = "#f0f0f0", color = "#333333") +
  # 绘制观测点,按对象区分颜色,设置点大小
  geom_sf(data = df_sf, aes(color = object), size = 3) +
  # 添加点的文本标注,微调位置避免遮挡
  geom_sf_text(data = df_sf, aes(label = object), nudge_x = 5e5, nudge_y = 2e5) +
  theme_minimal() +
  # 设置图例标题
  labs(color = "观测对象")

关键注意点

  • 原始经纬度默认是WGS84坐标系(EPSG:4326),必须在st_as_sf中明确指定,否则投影转换会出错
  • 点的CRS必须与底图完全一致,否则点会出现在错误位置
  • 可以根据需求调整点的大小、颜色、标注位置等参数

内容的提问来源于stack exchange,提问作者Muhammad Kamil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 03:36:21