import numpy as np
import xarray as xr
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import cartopy.mpl.ticker as cticker
import datetime as dt
from cartopy.util import add_cyclic_point
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
q =r’C:\Users\86182\Desktop\lunwenshuju\q.nc’
u = r’C:\Users\86182\Desktop\lunwenshuju\u.nc’
v = r’C:\Users\86182\Desktop\lunwenshuju\v.nc’
du = xr.open_dataset(u)
dv = xr.open_dataset(v)
dq = xr.open_dataset(q)
u = du[‘u’]
v = dv[‘v’]
q = dq[‘q’]
u = u.loc[‘2001-01-01′:’2020-12-01’,:,:,:]
v = v.loc[‘2001-01-01′:’2020-12-01’,:,:,:]
q = q.loc[‘2001-01-01′:’2020-12-01’,:,:,:]
q = q.loc[q.time.dt.month.isin(7)]
u = u.loc[u.time.dt.month.isin(7)]
v = v.loc[v.time.dt.month.isin(7)]
lon = du[‘longitude’]
lat = du[‘latitude’]
# 常数
g = 9.8
# 求平均,降维
u = u.mean([‘time’])
v = v.mean([‘time’])
q = q.mean([‘time’])# g/kg
# 计算
uq = u * q / g
vq = v * q / g
sq = np.sqrt(uq**2 + vq**2) # g/kg
# 画图
fig = plt.figure(figsize=(12,9),dpi=300)
proj = ccrs.PlateCarree(central_longitude=100)
leftlon, rightlon, lowerlat, upperlat = (50,210,-40,60)
img_extent = [leftlon, rightlon, lowerlat, upperlat]
ax = fig.add_axes([0.1, 0.1, 0.8, 0.6],projection = proj)
ax.set_extent(img_extent, crs=ccrs.PlateCarree())
ax.add_feature(cfeature.COASTLINE,zorder=1)
# x,y范围
ax.set_xticks(np.arange(leftlon,rightlon+20,20), crs=ccrs.PlateCarree())
ax.set_xticks(np.arange(leftlon,rightlon+10,10),minor=True, crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(lowerlat,upperlat+20,20), crs=ccrs.PlateCarree())
lon_formatter = cticker.LongitudeFormatter()
lat_formatter = cticker.LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)
# 去除nc文件数据格点问题带来的白线
cycle_sq, cycle_lon = add_cyclic_point(sq, coord=lon)
cycle_LON, cycle_LAT = np.meshgrid(cycle_lon, lat)
# 给定范围
clevs_AIR = np.arange(0,20,1)
cs = ax.contourf(cycle_LON, cycle_LAT, cycle_sq ,clevs_AIR,
cmap=’RdBu_r’,
transform=ccrs.PlateCarree(),
extend = ‘both’)
position=fig.add_axes([0.2, 0, 0.6, 0.05])
cb = plt.colorbar(cs,cax=position,
orientation=’horizontal’,
pad=0.05, aspect=30)
cb.set_label(‘ g/(cm*hPa*s)’)
ax.set_title(‘2001-2020,850hPa Mean Water vapor flux in July’,
y=1.02) #设置标题
输出结果是:Input z must be 2D, not 3D
我应该修改什么比较好