python 封装_Python气象绘图教程——封装地图函数

本节提要:关于一些地图操作



首先必须要说一下,添加地图的操作,各人有各人的做法,你觉得你的好,我觉得我的好。我这里只提供一种我比较常用的办法。 我是比较少的使用subplot(或类似)这种添加方式的,而更偏爱fig.add_axes( )这种,因为可能我自学的时候走岔了路,喜欢画些稀奇古怪的图,所以我完全膺服摸鱼咯大佬推荐的这种方式,因为可以完全自己调节子图位置,比如:

f4a646de3b33f14fab85725ead85f090.png

a3646111f0c8b78645ae39ce80718853.png

等等等等,如果在封装绘图函数方面熟悉一点,其实很快就会爱上这种添加子图的方式。下面是将我初学绘图时的添加多子图地图封装函数改进后的一个小程序,希望能帮助大家理解添加子图时,封装绘图函数的妙用:
import matplotlib.pyplot as pltimport numpy as npimport cartopy.crs as ccrsimport cartopy.feature as cfeatfrom cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatterfrom cartopy.io.shapereader import Readerimport xarray as xrplt.rcParams['font.sans-serif']=['SimHei']#正常显示中文proj= ccrs.PlateCarree()#缩写投影extent=[75,135,5,55]#绘图范围reader = Reader( r'D:\python\Province_9\Province_9.shp')###########################################################################def create_map(ax,b):#封装绘图函数    ax.add_feature(cfeat.COASTLINE.with_scale('50m'),lw=0.6)    ax.add_feature(cfeat.LAKES.with_scale('50m'))    ax.add_feature(cfeat.RIVERS.with_scale('50m'),lw=0.5)    provinces = cfeat.ShapelyFeature(reader.geometries(), proj, edgecolor='k', facecolor='none',alpha=0.75)    ax.add_feature(provinces, linewidth=0.4)    ax.set_xticks(np.arange(extent[0], extent[1]+10, 10))    ax.set_yticks(np.arange(extent[2], extent[3]+10, 10))    ax.xaxis.set_major_formatter(LongitudeFormatter())    ax.yaxis.set_major_formatter(LatitudeFormatter())    ax.tick_params(axis='both',labelsize=6,direction='in',right=True,top=True)    ax.grid(linewidth=0.6, color='k', alpha=0.45, linestyle='--')    ax.set_extent(extent,crs=proj)    a2=fig.add_axes([(b[0]+0.348),(b[1]+0.038),b[2]*0.25,b[3]*0.25],projection=proj)    a2.add_feature(provinces, linewidth=0.3)    a2.set_extent([105,125,0,25])    a2.text(110,27,'中国南海',fontsize=5)    return ax,a2fig=plt.figure(figsize=(6,6),dpi=900)ax1=fig.add_axes([0,0.01,0.45,0.45],projection=proj)ax2=fig.add_axes([0,0.5,0.45,0.45],projection=proj)ax3=fig.add_axes([0.5,0.01,0.45,0.45],projection=proj)ax4=fig.add_axes([0.5,0.5,0.45,0.45],projection=proj)create_map(ax1,[0,0.01,0.45,0.45])create_map(ax2,[0,0.5,0.45,0.45])create_map(ax3,[0.5,0.01,0.45,0.45])create_map(ax4,[0.5,0.5,0.45,0.45])

21f166a8e67f139d049275b91a4cbb4b.png

在前面的封装函数中,需要传入你需要绘制地图的子图和这个子图的位置与大小参数,然后调用封装函数,自动添加南海小地图。 其中传入的b会被用来绘制a2,a2表示南海小地图。 比如create_map(ax1,[0,0.01,0.45,0.45])第一个参数表示接下来的操作都是基于ax1子图的,包括在ax1上画地图,添加海岸线,添加经纬度坐标等。而[0,0.01,0.45,0.45]这个则作为绘制南海小地图的依据。以后无论怎么变,只要修改封装函数里的参数,即可随意修改南海小地图位置。 上面图片实际上有8个子图,4个中国大子图,4个南海小子图。除开封装函数部分,实际上只有八个语句就能绘制出四联的中国地图,其实我觉得还是比较方便的。 当然,复述前言,这种方法只是我的一家之言。杀猪杀屁股,各有各的杀法。能够帮助到气象同仁那就再好不过了。 欢迎关注云台书使公众号获取更多资讯

22e6589b54827772a3e6e381fd5933fd.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值