python - 如何在 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
解决方案
您可以使用以下where
方法xarray
:
t2m_set.where(lsm_set)
它应该给你一个很好的掩蔽xarray.Dataset
。
推荐阅读
- unity3d - 仅渲染框内的点云数据
- git - 如何解决阅读我的结束标签问题
- node.js - 我正在尝试安装 npm 包,但它不起作用。错误:EPERM:不允许操作,mkdir 'C:\Users\HAMZA~1'
- loops - 如何传递具有不同参数的场景大纲?
- android - BottomsheetDialog 未设置样式或本地化
- android - 无法在 android studio 中创建资产文件夹
- c# - selenium webdriver 错误抛出一个带有空响应的异常,向远程 WebDriver 服务器发送 HTTP 请求以获取 URL
- c++ - 如何配置 clang-format 以采用 UTF-8 字符的长度,而不是其实际字节长度?
- reactjs - Adding new property to state and setting state and then destructing the state object i am unable to get the property added
- excel - Execute both custom function and commands function in a shared runtime using office js