#循环读取200hpa纬向风
import xarray as xr #导入模块
import os
path1 = r"G:/interp_245/interp_2015_789_yearmean_invertlat/200hpa_ua" #文件夹路径
files = os.listdir(path1)#以列表的形式返回文件名
ua2=np.zeros((10,180,360))#存放10个模式全球ua风场
i=0
for file in files:
f=xr.open_dataset(path1 + "\\" + file)
ua=f['ua']
ua=ua.loc['2015-08-01':'2044-08-28':1].loc[:,20000,90:-90,0:360]
ua=np.nanmean(ua,axis=(1))#time plev求平均
ua2[i,:,:,:]=ua;i=i+1 #讲每个模式数据放进ua2这个空数组
最后得到的数据是10个模式30年平均的的全球200hpa纬向风
#循环画图代码
import cartopy.feature as cfeature
import cartopy.crs as ccrs
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from matplotlib.ticker import MultipleLocator, FormatStrFormatter
import matplotlib as mpl
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(28,11),dpi=300) #画布大小
extent=[0,330,-30,60] #地图范围
xticks=np.arange(extent[0],extent[1]+1,30) #x轴
yticks=np.arange(extent[2],extent[3]+1,30) #y轴
plt.rcParams['font.sans-serif']=['Times New Roman']
plt.subplots_adjust(wspace=0.2, hspace=0.08)#wspace、hspace左右、上下的间距
proj = ccrs.PlateCarree(central_longitude=180) #中央经度180
for i in range(10):
ax = fig.add_subplot(5,2,i+1,projection=ccrs.PlateCarree(central_longitude=180))
#ax=fig.add_axes([0,(5-i)*0.25,1,0.22],projection=ccrs.PlateCarree(central_longitude=180))
#地图相关设置,包括边界,河流,海岸线,坐标
ax.set_extent(extent,crs=ccrs.PlateCarree())
ax.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax.add_feature(cfeature.LAND.with_scale('10m'),color='lightgray')#添加陆地并且陆地部分全部填充成浅灰色
ax.add_feature(cfeature.LAKES, alpha=0.5)
#横纵坐标设置
ax.set_xticks(xticks, crs=ccrs.PlateCarree())
ax.set_yticks(yticks, crs=ccrs.PlateCarree())
lon_formatter = LongitudeFormatter()
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)
#画纬向风填充图
fg=ax.contourf(lon,lat,np.linspce(-8,8,11),zorder=0, extend ='both',
transform=ccrs.PlateCarree(),cmap='RdBu_r')
#刻度线设置
from matplotlib.pyplot import MultipleLocator
xmajorLocator = MultipleLocator(30)#先定义xmajorLocator,再进行调用
ax.xaxis.set_major_locator(xmajorLocator)#x轴最大刻度
xminorLocator = MultipleLocator(15)
ax.xaxis.set_minor_locator(xminorLocator)#x轴最小刻度
ymajorLocator = MultipleLocator(30)
ax.yaxis.set_major_locator(ymajorLocator)#y轴最大刻度
yminorLocator = MultipleLocator(15)
ax.yaxis.set_minor_locator(yminorLocator)#y轴最小刻度
#最大刻度、最小刻度的刻度线长短,粗细设置
ax.tick_params(which='major', length=12,width=1,color='k')#最大刻度长度,宽度设置,
ax.tick_params(which='minor', length=7,width=0.8,color='k')#最小刻度长度,宽度设置
ax.tick_params(which='both',bottom=True,top=False,left=True,labelbottom=True,labeltop=False)
plt.rcParams['xtick.direction'] = 'out' #将x轴的刻度线方向设置向内或者外
#设置坐标刻度值的大小以及刻度值的字体
plt.tick_params(labelsize=14)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
# #横纵坐标标签设置
font = {'family' : 'Times New Roman','weight' : 'normal','size' : 14}
ax.set_ylabel( 'model'+str(i+1), font )