美文网首页Python与大气科学
Python气象数据处理与绘图(6):极地投影绘图

Python气象数据处理与绘图(6):极地投影绘图

作者: 摸鱼咯 | 来源:发表于2020-02-07 18:12 被阅读0次

    当我们研究高纬(极地)区域时,往往需要极地投影。在前文中通过EOF介绍了圆柱投影,实际上极地投影的绘制仅需改变其中几个参数便可以实现。
    还是先上图:


    图1 极地投影填色图

    填色图的意义并不重要(我之前研究求过的两个时间序列与海冰密集度的相关系数分布),接下来分享一下绘图的经验和代码。

    proj =ccrs.NorthPolarStereo(central_longitude=90)
    #在圆柱投影中proj = ccrs.PlateCarree(central_longitude=xx)
    leftlon, rightlon, lowerlat, upperlat = (-180,180,60,90)
    #仅画60°E-90°E部分
    img_extent = [leftlon, rightlon, lowerlat, upperlat]
    fig1 = plt.figure(figsize=(12,8))
    #以下我仅展示了左半部分,右半部分基本一致,在此省略
    f1_ax1 = fig3.add_axes([0.1, 0.1, 0.5, 0.5],projection = ccrs.NorthPolarStereo())
    #注意此处添加了projection = ccrs.NorthPolarStereo(),指明该axes为北半球极地投影
    f1_ax1.gridlines()
    f1_ax1.set_extent(img_extent, ccrs.PlateCarree())
    #通过圆柱投影的范围限制地图范围,这样设置地图参数较为方便
    f1_ax1.add_feature(cfeature.COASTLINE.with_scale('50m'))
    #######以下为网格线的参数######
    theta = np.linspace(0, 2*np.pi, 100)
    center, radius = [0.5, 0.5], 0.5
    verts = np.vstack([np.sin(theta), np.cos(theta)]).T
    circle = mpath.Path(verts * radius + center)
    ##############################
    f3_ax1.set_boundary(circle, transform=f3_ax1.transAxes)
    #设置axes边界,为圆形边界,否则为正方形的极地投影
    #c7 = f3_ax1.contourf(lon,lat,r, zorder=0, levels =np.arange(-0.6,0.7,0.1) , extend = 'both',transform=ccrs.PlateCarree(), cmap=plt.cm.RdBu_r)
    #绘制填色,需要说明的是:虽然是极地投影,但是我们的数据仍是按圆柱投影计算的,所以数据的坐标转换仍为transform=ccrs.PlateCarree()
    

    以上便完成了基本图形的绘制,但是效果是这样的(在此并未添加填色):


    图2 极地投影

    然而发现么得坐标信息,很绝望,我查了很多资料,发现用basemap库绘图解决这个问题是比较容易的,然而并没有发现cartopy是如何解决这个问题的(如果有大佬知道也可以留言一下相关链接),
    所以我给了一个很蠢的办法,自己强行加...加!就硬加!

    fig1.text(x, y, r'0$^\circ$',fontsize=14, horizontalalignment='center',verticalalignment='center')
    

    调整文字坐标x,y最终便能达到图1的效果
    最后加上色标完成。

    position=fig1.add_axes([0.38, 0.04, 0.35, 0.025])
    fig1.colorbar(c7,cax=position,orientation='horizontal',format='%.1f',)
    

    相关文章

      网友评论

        本文标题:Python气象数据处理与绘图(6):极地投影绘图

        本文链接:https://www.haomeiwen.com/subject/pgcvxhtx.html