我正在尝试在恒定压力水平(500hPa)下创建与MetPy xarray tutorial类似的相对湿度的等高线图。我已经使用Siphon软件包获取了数据,并将其解析为一个数组,该数组似乎是,其中时间和高度是固定的,纬度/经度是可变的:
<xarray.DataArray 'relative_humidity' (time: 1,lat: 141,lon: 121)>
array([[[100.,100.,...,48.5,48.1],[100.,42.8,41.1],[ 9.5,9.4,20.7,18.7],9.9,23.8,21.1]]],dtype=float32)
Coordinates:
reftime (time) datetime64[ns] 2020-03-24T12:00:00
* time (time) datetime64[ns] 2020-03-24T18:00:00
isobaric float32 50000.0
* lat (lat) float32 55.0 54.75 54.5 54.25 54.0 ... 20.75 20.5 20.25 20.0
* lon (lon) float32 270.0 270.25 270.5 270.75 ... 299.5 299.75 300.0
crs object Projection: latitude_longitude
要获得此数组,我使用了代码:
data = ncss.get_data(query)
#Parse data using MetPy
ds = xr.open_dataset(NetCDF4DataStore(data))
data = ds.metpy.parse_cf()
#Rename variables to useful things
data = data.rename({
'Vertical_velocity_pressure_isobaric': 'omega','Relative_humidity_isobaric': 'relative_humidity','Temperature_isobaric': 'temperature','u-component_of_wind_isobaric': 'u','v-component_of_wind_isobaric': 'v','Geopotential_height_isobaric': 'height'
})
#Get data specific to 500mb
zH5 = data['height'].metpy.sel(vertical=850 * units.hPa)
zH5_crs = zH5.metpy.cartopy_crs
#Define coordinates
vertical,= data['temperature'].metpy.coordinates('vertical')
time = data['temperature'].metpy.time
x,y = data['height'].metpy.coordinates('x','y')
lat,lon = xr.broadcast(y,x)
#Create relative humidity array
rel_hum = data['relative_humidity'].metpy.sel(vertical=500*units.hPa)
但是,当我将RH绘制为填充轮廓时,
rh = ax.contourf(x,y,rel_hum,levels=[70,80,90,100],colors=['#99ff00','#00ff00','#00cc00'])
我收到一条错误消息:
TypeError: Input z must be 2D,not 3D
在阅读another SO post about a similar issue之后,我了解了为什么轮廓函数的第三个参数需要是一个二维数组,但是我不确定为什么我的过程在这里(紧密模仿xarray tutorial code from the MetPy docs)不会产生能够绘制的数组。