能否利用南极ERA5地位势数据制作极坐标径向填充等高线地图
可以实现,核心是将ERA5位势高度数据转换为与ggOceanMaps底图匹配的投影格式,再通过ggplot2图层逻辑叠加即可,完整实现步骤和代码如下:
1. 依赖包安装与加载
需要额外用到metR包实现等高线填充,tidyr、dplyr做数据格式转换:
# 已安装过的包可跳过安装步骤 install.packages(c("ncdf4", "tidyverse", "metR")) install.packages(c("ggOceanMapsData", "ggOceanMaps"), repos = c("https://cloud.r-project.org", "https://mikkovihtakari.github.io/drat")) library(ncdf4) library(tidyverse) library(metR) library(ggOceanMapsData) library(ggOceanMaps)
2. 数据读取与预处理
# 读取NC数据 datos_geo <- nc_open("geopotential_antartida.nc") geo <- ncvar_get(datos_geo, "z") lon <- ncvar_get(datos_geo, "longitude") lat <- ncvar_get(datos_geo, "latitude") nc_close(datos_geo) # 调整纬度顺序、计算多年气候态平均 lat <- rev(lat) geo <- geo[, length(lat):1, ] media_geo <- apply(geo, c(1,2), mean) # 二维矩阵转为长格式数据框 geo_df <- expand.grid(lon = lon, lat = lat) %>% mutate(z = as.vector(media_geo)) # 转换为与ggOceanMaps南极底图匹配的投影坐标 geo_df <- transform_coord(geo_df, lon = "lon", lat = "lat", bind = TRUE, proj = "antarctic")
3. 图层叠加绘图
basemap(limits = -50, glaciers = TRUE, bathymetry = FALSE) + # 叠加位势高度填色等高线 geom_contour_fill(data = geo_df, aes(x = lon.proj, y = lat.proj, z = z), na.rm = TRUE) + # 匹配原有配色方案 scale_fill_gradientn(colours = c("darkblue", "palegreen", "yellow", "red")) + # 调整坐标轴、图例样式 labs(x = NULL, y = NULL, fill = "500hPa位势高度") + theme( axis.text = element_blank(), axis.ticks = element_blank() )
注意事项
- 如果出现0°/360°经度连接处的断层,可提前将经度转换为-180°~180°范围:
geo_df$lon <- ifelse(geo_df$lon > 180, geo_df$lon - 360, geo_df$lon)后再做坐标转换 - 等高线间隔可通过
geom_contour_fill的breaks参数自定义调整
内容的提问来源于stack exchange,提问作者florenciab
相关产品推荐
相关产品推荐

