- 积分
- 5966
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-9-11
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
metpy不仅有一个包括了很多物理参量计算函数的方法:calc,还有一些实用的画图方法,比如在此绘制的站点图。先上图为敬:
图画的一般般,主要是使用了StationPlot这个函数,过程也不复杂,在stationplot.plot_parameter()方法中规定好变量所在站点四周的位置,变量名,格式化输出,以及字体大小和颜色,就可以了。没有可以直接调用的图例方法得到所需的图例,但可以通过画图中图并在其中注解(annotate)的方式达到效果。具体代码如下:
- import numpy as np
- import matplotlib.pyplot as plt
- from metpy.plots import StationPlot #如果因为没装cartopy得到提示\
- # cannot import USCOUNTIES and USSTATES without cartopy installed
- # 不用理会
- parallels = np.arange(27,34,2)
- meridians = np.arange(104,112,2)
- labels=['K','TT','CAPE','LI','PW','CIN',chr(952)+'se5-8','H20','H0']
- colors=['red','blue','red','blue','red','blue','red','blue','red']
- # params为2(2个子图)*4(4个站点)*9(9个变量)
- for k in range(params.shape[0]): #画每个子图
- ax[k]=plt.subplot(nrows, ncols, k+1)
- m = Basemap(ax=ax[k],llcrnrlon=104, llcrnrlat=27, urcrnrlon=111, urcrnrlat=33)# 画地图
- CHN='G:\\2019\\los_documentos_de_los_colegos\\hysplit\\'
- m.readshapefile(CHN+'\\gadm36_CHN_shp\\gadm36_CHN_1',
- 'states',drawbounds=True)
- m.readshapefile(CHN+'\\gadm36_TWN_shp\\gadm36_TWN_1',
- 'taiwan',drawbounds=True)
- m.drawcoastlines()
- m.drawcountries(linewidth=0.5)
- m.drawparallels(parallels,ax=ax[k],linewidth=0.,labels=[1,0,0,0],fontsize=5)# 画经纬度
- m.drawmeridians(meridians,ax=ax[k],linewidth=0.,labels=[1,0,0,1],fontsize=5)# 画经纬度
- stationplot = StationPlot(ax[k],stn_lon,stn_lat,clip_on=True,fontsize=5,spacing=12)
- stationplot.plot_parameter('NW',params[k,:,0], formatter='.0f',color='red') # 画物理量1
- stationplot.plot_parameter('W', params[k,:,1], formatter='.1f',color='blue')# 画物理量2
- stationplot.plot_parameter('SW',params[k,:,2], formatter='.0f',color='red') # 画物理量3
- stationplot.plot_parameter('N', params[k,:,3], formatter='.0f',color='blue')# 画物理量4
- stationplot.plot_parameter('NE',params[k,:,4], formatter='.0f',color='red') # 画物理量5
- stationplot.plot_parameter('E', params[k,:,5], formatter='.0f',color='blue')# 画物理量6
- stationplot.plot_parameter('SE',params[k,:,6], formatter='.1f',color='red') # 画物理量7
- stationplot.plot_parameter('S', params[k,:,7], formatter='.1f',color='blue')# 画物理量8
- stationplot.plot_parameter('C', params[k,:,8], formatter='.0f',color='red') # 画物理量9
- if k==0:
- axlg =fig.add_axes([0.06, 0.6, 0.12, 0.12]) # 确定图中图在子图1中的位置
- else:
- axlg =fig.add_axes([0.53, 0.6, 0.12, 0.12]) # 确定图中图在子图2中的位置
- x=np.arange(3)
- y=np.arange(3)
- y=y[::-1]
- x,y=np.meshgrid(x,y)
- axlg.scatter(x,y,s=0) # 确定图中图里各个物理量的位置,散点不画出来
- for l in range(0,x.size): # 绘制图中图里各个物理量
- axlg.annotate(labels[l],xy=(x.flatten()[l],y.flatten()[l]),xytext=(x.flatten()[l],y.flatten()[l]),color=colors[l],fontsize=4)
- axlg.set_xticks([]) # 取消图中图的坐标刻度
- axlg.set_yticks([]) # 取消图中图的坐标刻度
- axlg.set_xlim([-0.15,2.35])# 约束图中图坐标范围
- axlg.set_ylim([-0.15,2.35])# 约束图中图坐标范围
- plt.subplots_adjust(top=0.98, bottom=0.08, right=0.95, left=0.05,hspace=0.0, wspace=0.08)
- plt.margins(0, 0)
- #plt.show()
- plt.savefig('G:\\comparisonplot\\stations.jpg',dpi=300,bbox_inches='tight')
复制代码 我的metpy为1.0,还有其他一些依赖库,见打包附件:
另外,StationPlot下还有画风场的plot_barb,plot_arrow,画天气符号的plot_symbol以及写文本的plot_text,大家可以自己取探索。
关于图例,如果大佬有更好的绘制方法欢迎留言回复或者最好mail我:352502026@qq.com
|
|