Matplotlib中Basemap绘图的地图边界线被截断问题求助
解决Basemap网格地图边界线被坐标轴截断的问题
使用Matplotlib的Basemap工具包创建网格地图时,地图投影的边界线会被坐标轴截断,导致边界线粗细不均。这是因为Basemap默认将地图内容贴合坐标轴的极值范围,而边界线的绘制是以该边界为基准向外扩展线宽的一半,边缘部分因此被坐标轴裁切。尝试Axes.margins无效,因为Basemap的坐标轴是投影转换后的自定义范围,该方法无法作用于这类轴。
方法:手动收缩坐标轴范围
在创建Basemap并绘制完地图元素后,手动调整坐标轴的范围,向中心收缩一定比例,为边界线留出足够的显示空间。具体步骤如下:
- 获取当前坐标轴的x/y范围;
- 按照一定比例向内收缩范围(比例可根据边界线宽度调整);
- 设置新的坐标轴范围。
修改后的完整代码:
import matplotlib as mpl from matplotlib import pyplot as plt import mpl_toolkits.basemap as basemap fig = plt.figure(figsize=(7,4)) gs = fig.add_gridspec(1, 1) gs01 = gs[0].subgridspec(3, 3) for i in range(3): for j in range(3): ax = fig.add_subplot(gs01[i,j]) m = basemap.Basemap(projection="kav7", lon_0=0, resolution="c", ax=ax) m.fillcontinents(color="#c3c3c3", lake_color="white") m.drawcountries(color="#939393") # 调整坐标轴范围,留出边界线显示空间 x_left, x_right = ax.get_xlim() y_bottom, y_top = ax.get_ylim() # 向内收缩0.5%,线宽越大,比例需适当增大 shrink_ratio = 0.005 ax.set_xlim(x_left * (1 + shrink_ratio), x_right * (1 - shrink_ratio)) ax.set_ylim(y_bottom * (1 + shrink_ratio), y_top * (1 - shrink_ratio)) plt.tight_layout() plt.show()
说明
- 收缩比例
shrink_ratio可根据边界线的实际宽度调整:如果通过m.drawmapboundary(linewidth=2)设置了较粗的边界线,需增大比例确保完整显示; - 原代码中的
gs0[0]是笔误,已修正为gs[0]; - 添加
plt.tight_layout()可优化子图间距,避免重叠。
内容的提问来源于stack exchange,提问作者Egor Lappo
相关产品推荐
相关产品推荐

