这篇文章主要介绍“python中如何使用cartopy库代码绘制台风路径”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中如何使用cartopy库代码绘制台风路径”文章能帮助大家解决问题。

使用python基于cartopy库绘制台风路径

使用python 绘制西太平洋进入我国的台风路径,文件为.dat格式,内容如下所示:

代码如下:

importnetCDF4asnc4importmatplotlib.pyplotaspltimportnumpyasnpimportdatetimeimportosimportcartopy.crsasccrspath='E://'#文件路径files=os.listdir(path)#得到文件夹下的所有文件名称fig=plt.figure(figsize=(20,12))#设置画布大小parallels=np.arange(0.,90.,3.)meridians=np.arange(0.0,360.,3.)ax=plt.axes(projection=ccrs.Robinson())#设置投影方式#Setfigureextent&ticksax.set_extent([100,150,5,50])#设置纬度范围#plt.grid(linestyle=':',color='y')#forfileinfiles:#按照顺序在files里面进行每一个文件的数据名称循环读取f=open(path+file,'r')#打开第一个dat文件records=f.readlines()#读取这个文件里面的所有数据f.close()#关闭这个dat文件date_t=''#设置一个用来表示空格btk_lat=[]#设置一个空的待传入数据的纬度btk_lon=[]#设置一个空的待传入数据的经度btk_vmax=[]#风速最大值Maximumsustainedwindspeedinknots:0-300kts.btk_time=[]#时间btk_rmw=[]#最大风速半径radiusofmaxwinds,0-999nmi.btk_name=[]#台风名称forrcdinrecords:#对这个dat文件里面,已经读取的每一行数据进行循环处理strs=rcd.split(',')#将每一个','分隔开if(len(strs)<21):#判断语句,如果这个被分割开的字符长度<21,继续进行处理continuedate_str=strs[2].strip('')#将strs这个list的索引为2的值赋给data_str,既年月日时ifdate_str==date_t:#判读如果是一个空格值,赋给data——strcontinuedt=datetime.datetime(int(date_str[0:4]),int(date_str[4:6]),int(date_str[6:8]),\int(date_str[8:]),0,0,0)btk_time.append(nc4.date2num(dt,units='secondsince1970-1-100:00:00'))#计算距离给的时间有多少秒,并从后往前排列#处理纬度lat_str=strs[6].strip()#判断南北纬iflat_str[-1]=='N':lat_t=float(lat_str[0:-1])*0.1else:lat_t=float(lat_str[0:-1])*-0.1btk_lat.append(lat_t)#处理经度lon_str=strs[7].strip()#判断东西经iflon_str[-1]=='E':lon_t=float(lon_str[0:-1])*0.1else:lon_t=float(lon_str[0:-1])*-0.1btk_lon.append(lon_t)#处理最大风速vmax=strs[8].strip()btk_vmax.append(float(vmax))#转换为单浮点型,(带小数点)#时间date_t=date_str#最大风速半径rmw=strs[19].strip()btk_rmw.append(float(rmw))#处理台风名称if(len(strs)<27):btk_name.append('noname')else:name=strs[27].strip()btk_name.append(name)#==============================================================================btk_lat=np.array(btk_lat)#将得到的list值转换为数组型的值,为了便于绘图。因为绘图的横纵坐标都是数组排列btk_lon=np.array(btk_lon)%360#因为原始经度为-180-0-180,出现断隔,为解决问题,化为0-360btk_time=np.array(btk_time)#时间转换btk_vmax=np.array(btk_vmax)*0.5144#风速换算公式btk_rmw=np.array(btk_rmw)*1.852##判断,如果数组纬度的值是0,则为nan值,既无法计算的值(无穷大,,),否则即为台风的名称if(len(btk_lat)==0):tc_name='noname'else:index=btk_vmax.argmax()tc_name=btk_name[index]#进行绘图,经度、纬度曲线ax.plot(btk_lon,btk_lat,color='k',linewidth=0.5,transform=ccrs.PlateCarree())#散点图绘制,经度、纬度、最大风速,cb=ax.scatter(btk_lon,btk_lat,c=btk_vmax,s=10.0,transform=ccrs.PlateCarree(),vmin=10,vmax=60)ax.coastlines()ax.gridlines(draw_labels=True,dms=True,x_inline=False,y_inline=False)plt.colorbar(cb,label='Vmax(m/s)',pad=0.07,orientation='vertical',shrink=1)plt.title('path')#保存绘制图片,注意保存路径不能放在dat文件夹中#fig.savefig(path3+'tester.tiff',format='tiff',dpi=100)

关于“python中如何使用cartopy库代码绘制台风路径”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。