【发布时间】:2021-09-15 11:36:25
【问题描述】:
我对使用 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
【问题讨论】: