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

Python中如何使用二进制NetCDF格式的海陆掩膜处理t2m数据

使用Cartopy调用NetCDF海陆掩膜数据的实现方案

问题背景

我刚接触cartopy库,需要使用NetCDF格式的二进制海陆掩膜数据,其中lsm_set是存储该二进制掩膜的NetCDF文件,t2m_set是我需要绘制的2米气温数据。我目前还在摸索cartopy的用法,但一直没搞懂如何调用海陆掩膜,查阅了多个相关问题,但都不适用于我的代码,因为我的t2m变量没有mask属性。

我的老师建议我可以用掩膜将海洋区域的数值标记为NaN,但我不知道高效的实现方式,我尝试用while循环处理,但面对大数据量时运行速度极慢。

我使用的数据来自哥白尼研究所UERRA欧洲再分析单一层数据集。

原问题代码

import os
import numpy as np
import matplotlib.pyplot as plt
import netCDF4 as nc
from netCDF4 import Dataset
import xarray as xr
from cartopy import config
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader


filepath1 = '... file path... '
lsm_set = xr.open_dataset(filepath1)

filepath2 = '... file path...'
t2m_set= xr.open_dataset(filepath2) 

lons = lsm_set.variables['longitude']#[:]
lats = lsm_set.variables['latitude']#[:]
lsm = lsm_set.variables['lsm']
t2m = t2m_set.variables['t2m']

plt.figure(figsize=(8, 8))
ax = plt.axes(projection = ccrs.Mercator())
ax.contourf(lons[200:400,100:300], lats[100:300,200:400], t2m[100:300,100:300],transform=ccrs.Mercator())
lsm_set.close()
t2m_set.close()
plt.show()

最终解决方案

解决方案实现非常简单,核心逻辑是将海陆掩膜的海洋区域转为NaN后叠加到气温数据上,海洋区域的数值就会自动变为NaN,绘制时不会显示:

lons = t2m_set.variables['longitude']#[:]
lats = t2m_set.variables['latitude']#[:]
lsm = lsm_set.variables['lsm']
t2m = t2m_set.variables['t2m'] 
lsm_masked = lsm.where(lsm!=0.)
mapdata = t2m+lsm_masked

绘制时直接使用mapdata替代原t2m数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:27:03