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

网格大小变化的全球海洋模型预测地图绘制问题求助

无插值绘制全球海洋模型预测地图解决方案

方案核心

你的网格是4度分辨率但面积随纬度变化(经纬度网格的固有特性),无需插值的话,直接用geom_polygon手动构建每个网格的多边形即可,彻底规避geom_tile的等面积强制扭曲、geom_stars的格式适配问题。

具体实现步骤

1. 处理数据生成网格多边形顶点

假设你的数据框为ocean_data,包含lon(网格中心经度)、lat(网格中心纬度)、pred(预测值)三列:

library(dplyr)
library(ggplot2)
library(tidyr)

# 计算每个网格的经纬度边界(4度分辨率,半宽为2度)
ocean_polygons <- ocean_data %>%
  mutate(
    lon_left = lon - 2,
    lon_right = lon + 2,
    lat_bottom = lat - 2,
    lat_top = lat + 2,
    # 生成每个网格的顺时针多边形顶点
    polygon = pmap(list(lon_left, lon_right, lat_bottom, lat_top), function(lleft, lright, bbottom, ttop) {
      data.frame(
        lon = c(lleft, lright, lright, lleft, lleft),
        lat = c(bbottom, bbottom, ttop, ttop, bbottom)
      )
    })
  ) %>%
  unnest(polygon)

2. 绘制带世界轮廓的地图

# 获取自带的世界地图数据
world_outline <- map_data("world")

ggplot() +
  # 绘制海洋模型网格
  geom_polygon(
    data = ocean_polygons,
    aes(x = lon, y = lat, group = interaction(lon, lat), fill = pred),
    color = NA  # 若要显示网格线,改为color="black"
  ) +
  # 叠加世界陆地轮廓
  geom_polygon(
    data = world_outline,
    aes(x = long, y = lat, group = group),
    fill = "white", color = "black"
  ) +
  # 选用适合全球的投影(罗宾逊投影)
  coord_map(projection = "robin") +
  # 填充色调整(按需替换)
  scale_fill_viridis_c(option = "plasma") +
  # 简洁主题设置
  theme_minimal() +
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    panel.grid = element_blank()
  )

关键优势

  • 完全保留原始网格的面积差异,无任何插值操作
  • 多边形绘制完全贴合经纬度网格的实际形状,避免geom_tile带来的扭曲
  • 依赖包均为ggplot2生态常用工具,无额外复杂依赖

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:55:25