Python+Basemap 经纬度标签的旋转与间距调整

前言

这是个非常个人的需求,原图如下,可以看到经度的标注是水平的,多子图并列的时候占空间很大,也不够美观。所以目的是将它垂直显示。
在这里插入图片描述

垂直显示经度标签

basemap绘制投影影像参看前面的博客。
下面两句是分别是绘制经纬线,查看它俩的方法和属性,发现并没有控制标签角度的部分。
但是basemap是基于matplotlib库的,所以可以通过操作matplotlib来实现目的。

drawparallels = m.drawparallels(parallels,labels=[True,False,False,False], linewidth=0.1) # labels = [left,right,top,bottom]
drawmeridians = m.drawmeridians(meridians,labels=[False,False,False,True], linewidth=0.1)

果然,经过查看,经纬度的标注是matplotlib中的text对象,而text对象是有控制旋转角度的set_rotation方法的。
在这里插入图片描述
绘制的经线对象是一个字典,每一个经度标注都是一对键值。

drawparallels
Out[3]: 
{43.6: ([<matplotlib.lines.Line2D at 0x1e302f12488>],[Text(-630.9148182665423, 18072.228086205356, '43.6°N')]),43.800000000000004: ([<matplotlib.lines.Line2D at 0x1e302f12408>],[Text(-630.9148182665423, 40310.456802672335, '43.8°N')])}

定位到第一个经度标注text对象位置。

drawparallels[list(drawparallels.keys())[0]][1][0]

设置标注的旋转角度为90,垂直显示。

drawparallels[list(drawparallels.keys())[0]][1][0].set_rotation(90)

在这里插入图片描述

更改标注离轴间距

同理,调用text对象的set_poistion()方法.
下面括号里的值为x y坐标值,可以先get_position()获取原始坐标,然后进行调整。

drawmeridians[list(drawmeridians.keys())[0]][1][0].set_position((4290.220764212488, -1000.9148182665423))