循环读取文件夹里所有nc文件跟循环画图

#循环读取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 ) 
   
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值