import pandas as pd import numpy as np import xarray as xr from wrf import to_np,interpz3d,destagger import glob import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter import cmaps import warnings
c = ax.contourf(data['XLONG'][0],data['XLAT'][0],(TSK_mean_space[0]+TSK_mean_space[1]+TSK_mean_space[2])/3.0,levels=np.arange(240,320,2),cmap='rainbow',transform=ccrs.PlateCarree(),extend='both')
ax.coastlines('50m', color='k', lw=0.3) ax.set_title('The Distribution of Average TSK',fontdict={'size':5}) cb = plt.colorbar(c,shrink=0.25) cb.set_label('TSK [K]',fontdict={'size':5}) cb.set_ticks([240,255,270,285,300,315]) cb.ax.tick_params(direction="out",length=1,labelsize=5) plt.savefig('space TSK mean.png') plt.show()
QFX_mean_space = [] for file in file_names: print(file) data = xr.open_dataset(file) QFX_mean_space_one = np.mean(data['QFX'],axis=0) QFX_mean_space.append(QFX_mean_space_one)#画降水空间分布图
c = ax.contourf(data['XLONG'][0],data['XLAT'][0],RAIN_mean_space,levels=np.arange(0,1.5,0.02),cmap='rainbow',transform=ccrs.PlateCarree(),extend='both')
ax.coastlines('50m', color='k', lw=0.3) ax.set_title('The Distribution of Average Rain',fontdict={'size':5}) cb = plt.colorbar(c,shrink=0.25) cb.set_label('[mm * $h^{-1}$]',fontdict={'size':5}) cb.set_ticks([0.4,0.8,1.2,]) cb.ax.tick_params(direction="out",length=1,labelsize=5) plt.savefig('space RAIN mean.png') plt.show()
c = ax.contourf(data['XLONG'][0],data['XLAT'][0],10000*(QFX_mean_space[0]+QFX_mean_space[1]+QFX_mean_space[2])/3.0,levels=np.arange(0,1.7,0.05),cmap='rainbow',transform=ccrs.PlateCarree(),extend='both')
ax.coastlines('50m', color='k', lw=0.3) ax.set_title('The Distribution of Average QFX',fontdict={'size':5}) cb = plt.colorbar(c,shrink=0.25) cb.set_label('[1.0E-4 kg $m^{-2}$ $s^{-1}$]',fontdict={'size':5}) cb.set_ticks([0.4,0.8,1.2]) cb.ax.tick_params(direction="out",length=1
,labelsize=5) plt.savefig('space QFX mean.png') plt.show()
TOA 辐射
#计算TOA的相关数据 TOA_mean_space = [] TOA_mean_lat = [] TOA_mean_lon = [] for file in file_names: print(file) data = xr.open_dataset(file) val = data['SWDNT'] - data['SWUPT'] + data['LWDNT'] - data['LWUPT'] TOA_mean_space_one = np.mean(val,axis=0) TOA_mean_lat_one = np.mean(val,axis=2) TOA_mean_lon_one = np.mean(val,axis=1) TOA_mean_space.append(TOA_mean_space_one) TOA_mean_lat.append(TOA_mean_lat_one) TOA_mean_lon.append(TOA_mean_lon_one)
c = ax.contourf(data['XLONG'][0],data['XLAT'][0],(TOA_mean_space[0]+TOA_mean_space[1]+TOA_mean_space[2])/3.0,levels=np.arange(-80,195,5),cmap='rainbow',transform=ccrs.PlateCarree(),extend='both')
ax.coastlines('50m', color='k', lw=0.3) ax.set_title('The Distribution of Average TOA',fontdict={'size':5}) cb = plt.colorbar(c,shrink=0.25) cb.set_label('TOA [W *$m^{-2}$]',fontdict={'size':5}) cb.set_ticks([-50,0,50,100,150]) cb.ax.tick_params(direction="out",length=1,labelsize=5) plt.savefig('space TOA mean.png') plt.show()
c = ax.contourf(data['XLONG'][0],data['XLAT'][0],(TOA_LW_mean_space[0]+TOA_LW_mean_space[1]+TOA_LW_mean_space[2])/3.0,levels=np.arange(-300,-90,10),cmap='rainbow',transform=ccrs.PlateCarree(),extend='both')
ax.coastlines('50m', color='k', lw=0.3) ax.set_title('The Distribution of Average TOA_LW',fontdict={'size':5}) cb = plt.colorbar(c,shrink=0.25) cb.set_label('TOA [W *$m^{-2}$]',fontdict={'size':5}) cb.set_ticks([-300,-250,-200,-150,-100]) cb.ax.tick_params(direction="out",length=1,labelsize=5) plt.savefig('space TOA_LW mean.png') plt.show()
c = ax.contourf(data['XLONG'][0],data['XLAT'][0],(TOA_SW_mean_space[0]+TOA_SW_mean_space[1]+TOA_SW_mean_space[2])/3.0,levels=np.arange(100,400,20),cmap='rainbow',transform=ccrs.PlateCarree(),extend='both')
ax.coastlines('50m', color='k', lw=0.3) ax.set_title('The Distribution of Average TOA_SW',fontdict={'size':5}) cb = plt.colorbar(c,shrink=0.25) cb.set_label('TOA [W *$m^{-2}$]',fontdict={'size':5}) cb.set_ticks([100,150,200,250,300,350,400]) cb.ax.tick_params(direction="out",length=1,labelsize=5) plt.savefig('space TOA_SW mean.png') plt.show()
c = ax.contourf(data['XLONG'][0],data['XLAT'][0],1.0e6*(xr.concat(result_q,'Time').mean('Time')[0]),levels=np.arange(1.5,4,0.1),cmap='rainbow',transform=ccrs.PlateCarree(),extend='both')
ax.coastlines('50m', color='k', lw=0.3) ax.set_title('The Distribution of Avarage Qvapor (800 hpa)',fontdict={'size':5}) cb = plt.colorbar(c,shrink=0.25) cb.set_label('[1.0E-6 kg kg-1]',fontdict={'size':5}) cb.ax.tick_params(direction="out",length=1,labelsize=5) cb.set_ticks([1.5,2.0,2.5,3.0,3.5,4.0]) plt.savefig('qvapor 800 hpa') plt.show()
手动计算水汽柱浓度的另外一种公式:
''' result=[] for file in file_names: #读取数据 ds = xr.open_dataset(file) #提取计算水汽柱浓度的变量 P = ds['P']+ds['PB'] g = 9.81 P_top = (ds['P_TOP'].values[0])*np.ones((1,90,180)) P_TOP = xr.DataArray(P_top, ds['PSFC'].coords,ds['PSFC'].dims) P = (xr.concat([ds['PSFC'].rename({"Time": "bottom_top"}),((P[0,0:29,:,:]+P[0,1:30,:,:])/2.0),P_TOP.rename({"Time": "bottom_top"})],'bottom_top')) P = P[0:30,:,:] -P[1:31,:,:] #计算水汽柱浓度 q_sumone = ((ds['QVAPOR'][0]/g)*P).sum(axis=0) #unit:kg/m2 result.append(q_sumone)