前言
这是个非常个人的需求,原图如下,可以看到经度的标注是水平的,多子图并列的时候占空间很大,也不够美观。所以目的是将它垂直显示。
垂直显示经度标签
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))