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

R+Natural Earth:Eqearth投影下赤道及纬度线缺失与警告问题

问题解答

一、恢复赤道及纬度线的方法

当使用自定义投影(如eqearth)时,ggplot2默认的panel.grid.major是基于投影后的平面坐标,而非地理坐标系的经纬线,因此会出现经纬线消失的情况。可以通过以下两种方式恢复:

方法1:手动生成经纬线并转换投影

手动创建WGS84坐标系下的经纬线,再转换到目标投影后添加到图中:

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

# 获取地图数据
ww_ini <- ne_countries(scale = "medium", type = 'map_units', returnclass = "sf")
bb <- ne_download(type = "wgs84_bounding_box", category = "physical", returnclass = "sf")

# 生成WGS84坐标系下的经纬线
# 纬度线:每30度一条,包含赤道
lat_lines <- st_sfc(lapply(seq(-90, 90, 30), function(lat) {
  st_linestring(rbind(c(-180, lat), c(180, lat)))
}), crs = 4326)
# 经度线:每60度一条
lon_lines <- st_sfc(lapply(seq(-180, 180, 60), function(lon) {
  st_linestring(rbind(c(lon, -90), c(lon, 90)))
}), crs = 4326)

# 转换到eqearth投影
lat_lines_eq <- st_transform(lat_lines, crs = "+proj=eqearth +wktext")
lon_lines_eq <- st_transform(lon_lines, crs = "+proj=eqearth +wktext")

# 绘图
gpl2 <- ggplot(data = ww_ini) +
  geom_sf(col = "black", lwd = 0.3) +
  # 添加转换后的经纬线
  geom_sf(data = lat_lines_eq, col = "grey", lwd = 0.3) +
  geom_sf(data = lon_lines_eq, col = "grey", lwd = 0.3) +
  geom_sf(data = bb, col = "grey", fill = "transparent") +
  xlab(NULL) + ylab(NULL) +
  ggtitle("Test title") +
  theme(plot.background = element_rect(fill = "white"),
        panel.background = element_rect(fill = 'white'),
        # 关闭默认网格,避免重复
        panel.grid.major = element_blank(),
        legend.position="top",
        plot.title = element_text(lineheight=.8, size=24, face="bold", vjust=1),
        legend.text = element_text(vjust=.4,lineheight=1,size = 14),
        legend.title = element_text(vjust=1,lineheight=1, size=14, face="bold" )) +
  coord_sf(crs = "+proj=eqearth +wktext") 

gpl2

方法2:使用ggspatial包快速添加地理网格

ggspatial包的annotation_map_grid可以直接基于地理坐标系生成网格,无需手动转换:

library(dplyr)
library(ggplot2)
library(rnaturalearth)
library(sf)
library(ggspatial)

# 获取地图数据
ww_ini <- ne_countries(scale = "medium", type = 'map_units', returnclass = "sf")
bb <- ne_download(type = "wgs84_bounding_box", category = "physical", returnclass = "sf")

# 绘图
gpl2 <- ggplot(data = ww_ini) +
  geom_sf(col = "black", lwd = 0.3) +
  geom_sf(data = bb, col = "grey", fill = "transparent") +
  # 添加地理网格,指定WGS84为基准坐标系
  annotation_map_grid(
    datum = st_crs(4326),
    colour = "grey",
    size = 0.3,
    # 可自定义经纬线间隔
    lat_interval = 30,
    lon_interval = 60
  ) +
  xlab(NULL) + ylab(NULL) +
  ggtitle("Test title") +
  theme(plot.background = element_rect(fill = "white"),
        panel.background = element_rect(fill = 'white'),
        panel.grid.major = element_blank(),
        legend.position="top",
        plot.title = element_text(lineheight=.8, size=24, face="bold", vjust=1),
        legend.text = element_text(vjust=.4,lineheight=1,size = 14),
        legend.title = element_text(vjust=1,lineheight=1, size=14, face="bold" )) +
  coord_sf(crs = "+proj=eqearth +wktext") 

gpl2

二、关于代码警告的处理

你遇到的OGR support is provided by the sf and terra packages among others警告,是因为rnaturalearth旧版本内部调用了已被弃用的rgdal包相关函数,而rgdal已被sf/terra替代。

  • 若你已经使用rnaturalearth开发版,后续版本会逐步移除这些警告;
  • 当前这些警告不会影响代码功能,可以忽略;
  • 若想彻底消除警告,确保安装最新的开发版rnaturalearth即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:25:17