python⾃带rbf函数吗_使⽤Python对站点数据执⾏径向基函数
(Rbf)插值可视化
以云南省2015年6⽉的29个⽓象站点数据为例进⾏径向基函数(Rbf)插值。数据格式如下:
今天需要使⽤到cartopy库来绘图,因此需要先安装好,据说安装很烦⼈,可以去uci下载.whl⽂件来安装,安装好后先测试⼀下是否可以运⾏,如下简单测试:
⾸先,这是⼀个不成功的尝试,因为没能成功加载shp图层导致最后的插值没有落在特定的地理范围内。如果有伙伴知道这个问题的解决⽅法,希望不吝赐教。我相信只要是问题就⼀定存在解决⽅案。
那么现在就开始今天的测试,⾸先还是⽼套路导⼊所需要的库或模块,如下:
importnumpy asnp
importpandas aspd
fromscipy.interpolate importRbf
importcartopy.feature ascfeat
fromcartopy.io.shapereader importReader
idliner importLONGITUDE_FORMATTER,LATITUDE_FORMATTER
importmatplotlib.pyplot asplt
然后设置能够正常显⽰中⽂和负号
接下来⽤pandas读取整理好的数据,使⽤的数据是云南省2015年6⽉的降⽔数据和⽓温数据,⽂中只测试了降⽔的Rbf插值。
climate = pd.read_excel('yunnanclimate.xlsx',header=None,sep='\s+',names=['站号','lon','lat','降⽔','⽓温'])#print(climate)
然后提取加载的xlsx数据⾥⾯的特定要素,⽐如经纬度,降⽔啥的
#读取climate⾥⾯的具体数据lon =climate['lon']lat =climate['lat']rain_data =climate['降⽔']
然后设置范围和格⽹化
#设置经纬度范围slon =np.linspace(97.85,105.21,36)slat =np.linspace(21.45,28.50,36)slon,slat =np.meshgrid(slon,slat)
接下来开始插值,function,我这⾥测试了3种,linear+cubic+gaussian,对于他们有啥区别哈哈,在最后我将分别展⽰这三种函数的模样#开始插值,使⽤径向基函数Rbffunc =Rbf(lon,lat,rain_data,function='cubic')rainX =func(slon,slat)
接下来加载云南省的shp图层以及修改经纬度啥的信息,就是这个位置我出错了,如果有知道解决⽅案的还请不吝赐教。
shp_path =r'D:\GeoCAS\Python\yunnan.shp'#设置绝对路径proj =ccrs.PlateCarree()#设置投影fig =plt.figure(figsize=
(5,5),dpi=300)ax =fig.subplots(1,1,subplot_kw={'projection':proj})extent = [97.85,105.21,21.45,28.50]#限定经纬度范围reader =Reader(shp_path)#读取shp⽮量yunnan
=cfeat.ries(),proj,edgecolor='k',facecolor='none')#设定shp特征
用subplot函数ax.add_feature(yunnan,linewidth=0.5)ax.set_extent(extent,crs=proj)gl
=ax.gridlines(crs=ccrs.PlateCarree(),draw_labels=True,linestyle='-')gl.xlabels_top=Falsegl.ylabels_right=Falsegl.xformatter
=LONGITUDE_FORMATTER#以经纬度格式显⽰xy轴gl.yformatter =LATITUDE_FORMATTER
gl.xlabel_style={'size':6}#设置xy字体⼤⼩gl.ylabel_style={'size':6}h
=ax.contourf(slon,slat,rainX,cmap='viridis',extend='both')lorbar(h,orientation='vertical')plt.show()最后得到的结果就是这样的,下⾯这是linear结果:
接下来是cubic结果:
最后就是Gaussian的结果,如下:
数据处理、分析、可视化
⾏业资讯、学习资料
长按关注不迷路

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。