微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

海面温度 NetCDF4 输入 z 必须是 2D,而不是 3D

如何解决海面温度 NetCDF4 输入 z 必须是 2D,而不是 3D

我正在尝试在地图上绘制最近的海面温度数据。当我下载 netCDF4 文件时我让它工作了,但是当我尝试从 https://www.ncei.noaa.gov/thredds/ 访问该文件时,我收到一个 TypeError,说“输入 z 必须是 2D,而不是 3D”。我最初使用的下载文件来自:https://psl.noaa.gov/ 这是我所拥有的:

from netCDF4 import Dataset as netcdf_dataset
from datetime import datetime,timedelta

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

from siphon.catalog import TDSCatalog
from xarray.backends import NetCDF4DataStore
import xarray as xr

# Catalog only has data from day before so must use timedelta(days=1)
today = datetime.utcNow()
date = datetime(today.year,today.month,today.day,12) - timedelta(days=1)


base_url = 'https://www.ncei.noaa.gov/thredds/catalog/OisstBase/NetCDF/V2.1/AVHRR/'
cat = TDSCatalog(f'{base_url}{date:%Y%m}/catalog.xml')
ncss = cat.datasets[f'oisst-avhrr-v02r01.{date:%Y%m%d}_preliminary.nc'].subset()

query = ncss.query()
query.time(date)
query.lonlat_Box(north=31,south=20,east=283,west=262)
query.accept('netcdf')
query.variables('sst')

data = ncss.get_data(query)
ds = xr.open_dataset(NetCDF4DataStore(data))

sst = ds.variables['sst'][0,:,:]
lats = ds.variables['lat'][:]
lons = ds.variables['lon'][:]

fig = plt.figure(figsize=(15,10))
ax = fig.add_subplot(111,projection=ccrs.PlateCarree())

# TypeError occurs here
sst_contour = ax.contourf(lons,lats,sst,levels=np.arange(0,34,2),cmap='turbo',vmin=0,vmax=38,transform=ccrs.PlateCarree())
isotherm_contour = ax.contour(lons,levels=[27],colors='black',linestyle='--',transform=ccrs.PlateCarree())

这是我使用从 https://psl.noaa.gov/ 下载的文件的工作版本的样子。对我在这里做错的任何意见将不胜感激:

enter image description here

解决方法

我在从数据集中提取数据时没有考虑 zlev。改变

sst = ds.variables['sst'][0,:,:]

以下修复了我的错误

sst = ds.variables['sst'][0,:]

enter image description here enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。