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

如何在R的ggplot中用WGS84生成等经纬度网格?

问题描述

本人熟悉R与ArcGIS Pro,希望在R中使用ggplot结合WGS84绘制地图。在ArcGIS Pro中缩放至德国区域时可获得等经纬度网格,但在R的ggplot2中使用WGS84却无法实现该效果,以下是尝试的代码及效果对比图。

尝试代码

library("ggplot2")
library("rnaturalearth")
library("rnaturalearthdata")
library("terra")
library("sf")

world <- ne_countries(scale = "medium", returnclass = "sf")
world_projected <- st_transform(world, crs("epsg:4326"))

ggplot(data = world_projected) +
  geom_sf(fill = "transparent") +
  theme(
    panel.grid.major = element_line(colour = alpha("black", 0.1), linewidth=1, linetype = 1)
  ) +
  coord_sf(xlim = c(5, 16), ylim = c(46, 56), default_crs = crs("epsg:4326"))

效果对比

  • ArcGIS Pro效果:
    ArcGIS Pro等经纬度网格效果
  • R ggplot2效果:
    R ggplot2当前网格效果
解决方案

问题根源在于ggplot2默认的网格生成逻辑:使用WGS84(EPSG:4326)时,panel.grid.major会根据绘图区域像素自动调整网格密度,不会严格按照固定经纬度间隔生成。要实现ArcGIS式的等间隔网格,需手动指定网格线位置。

修改后的代码如下:

library("ggplot2")
library("rnaturalearth")
library("rnaturalearthdata")
library("sf")

# 获取地图数据并转换为WGS84
world <- ne_countries(scale = "medium", returnclass = "sf") |>
  st_transform(crs = "EPSG:4326")

# 定义德国区域经纬度范围
lon_range <- c(5, 16)
lat_range <- c(46, 56)

# 生成等间隔经纬度网格(可调整by参数改变间隔)
lon_grid <- seq(lon_range[1], lon_range[2], by = 2)
lat_grid <- seq(lat_range[1], lat_range[2], by = 2)

ggplot(data = world) +
  geom_sf(fill = "transparent") +
  # 添加手动网格线
  geom_hline(yintercept = lat_grid, colour = alpha("black", 0.1), linewidth = 1) +
  geom_vline(xintercept = lon_grid, colour = alpha("black", 0.1), linewidth = 1) +
  # 锁定坐标范围与CRS
  coord_sf(xlim = lon_range, ylim = lat_range, crs = "EPSG:4326") +
  # 关闭默认自动网格
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank()
  )

代码说明

  1. 手动生成网格:通过seq()创建固定间隔的经纬度值,by参数可按需调整(比如改成1度);
  2. 替换默认网格:用geom_hline()和geom_vline()添加自定义网格,同时关闭ggplot默认的自动网格;
  3. 保持CRS一致:全程使用EPSG:4326,避免坐标转换导致的网格偏移。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:00:35