首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >海洋表面温度NetCDF4输入z必须是2D的,而不是3D的

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

Stack Overflow用户
提问于 2021-04-17 23:10:32
回答 1查看 70关注 0票数 1

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

代码语言:javascript
运行
复制
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, lats, sst, levels=[27], colors='black', linestyle='--',
                              transform=ccrs.PlateCarree())

这是我的工作版本使用从https://psl.noaa.gov/下载的文件时的样子。任何关于我在这里做错了什么的意见都将非常感谢:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-18 01:14:49

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

代码语言:javascript
运行
复制
sst = ds.variables['sst'][0,:,:]

下面修复了我的错误

代码语言:javascript
运行
复制
sst = ds.variables['sst'][0,0,:,:]

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67139682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档