目前为止我没有找到cartopy包自动添加地图比例尺的方式,我结合别人的代码写了这个手动添加比例尺的函数,个人觉得在外观上比线段比例尺漂亮一些。之所以是手动的,是因为这种方法不会根据你的地图坐标系和投影自动生成比例尺,而需要你知道实际距离和图上距离自己计算比例尺再进行绘图。
def scale_bar(ax, x, y, length, low, up, xtext, ytext, lw = 5):
#画比例尺函数
# x代表比例尺开始的经度
# y代表比例尺所在纬度
# length代表比例尺的长度,单位为多少个经度
# low代表竖刻度线的y最小值调节距离
# up代表竖刻度线的y最大值调节距离
# xtext代表文字的x调节距离
# ytext代表文字的y调节距离
# lw代表比例尺的宽度
step = length/5 #计算步长,画3格
#画3个矩形
rect1 = plt.Rectangle((x,y), step, 0.2, facecolor='black', edgecolor='black',linewidth=1)
rect2 = plt.Rectangle((x+step,y), step, 0.2, facecolor='white', edgecolor='black',linewidth=1)
rect3 = plt.Rectangle((x+step*2,y), step, 0.2, facecolor='black', edgecolor='black',linewidth=1)
ax.add_patch(rect1)
ax.add_patch(rect2)
ax.add_patch(rect3)
#画4个刻度
plt.vlines(x=x, ymin=y-(lw/100)*low, ymax=y+lw/100*up, colors="black", ls="-", lw=1)
plt.vlines(x=x+step, ymin=y-(lw/100)*low, ymax=y+lw/100*up, colors="black", ls="-", lw=1)
plt.vlines(x=x+step*2, ymin=y-(lw/100)*low, ymax=y+lw/100*up, colors="black", ls="-", lw=1)
plt.vlines(x=x+step*3, ymin=y-(lw/100)*low, ymax=y+lw/100*up, colors="black", ls="-", lw=1)
#写标签:0,400,,800,1200,km
plt.text(x, y+lw/100*up*ytext, '0', horizontalalignment = 'center',fontsize=20)
plt.text(x+step, y+lw/100*up*ytext, '400', horizontalalignment = 'center',fontsize=20)
plt.text(x+step*2, y+lw/100*up*ytext, '800', horizontalalignment = 'center',fontsize=20)
plt.text(x+step*3, y+lw/100*up*ytext, '1200', horizontalalignment = 'center',fontsize=20)
plt.text(x+step*3*xtext, y+lw/100*up*ytext, 'km', horizontalalignment = 'center',fontsize=20)
函数中的参数需要根据你的实际应用进行修改。以下是案例结果。