首页 > 解决方案 > 如何在 python 中使用二进制 netcdf 掩码?

问题描述

我对使用 cartopy 包相当陌生。我想使用来自 netcdf 格式的给定二进制地图的陆海掩码。这里 lsm_set 是我的 netcdf 文件,其中包含该二进制映射,而 t2m_set 是我想要映射的数据。我还在玩一些 cartopy 来掌握它,但我似乎无法弄清楚如何使用陆海面具。我在这里阅读了几个相关问题,但它们不适用于我的代码,因为我的 t2m 变量没有属性掩码。

我的老师说我可以用它来将海值标记为“NaN”,但我不知道一种有效的方法。我尝试了一个while循环,但是当你处理这么多数据时,这非常慢:')

我在以下链接中使用了从哥白尼研究所找到的数据:https ://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-uerra-europe-single-levels?tab=form

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()

任何朝着正确方向的轻推表示赞赏,谢谢!


解决了!

事实证明,解决方案比我想象的要容易得多。

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

标签: pythonmaskcartopy

解决方案


您可以使用以下where方法xarray

t2m_set.where(lsm_set)

它应该给你一个很好的掩蔽xarray.Dataset


推荐阅读