You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中Basemap绘图的地图边界线被截断问题求助

解决Basemap网格地图边界线被坐标轴截断的问题

使用Matplotlib的Basemap工具包创建网格地图时,地图投影的边界线会被坐标轴截断,导致边界线粗细不均。这是因为Basemap默认将地图内容贴合坐标轴的极值范围,而边界线的绘制是以该边界为基准向外扩展线宽的一半,边缘部分因此被坐标轴裁切。尝试Axes.margins无效,因为Basemap的坐标轴是投影转换后的自定义范围,该方法无法作用于这类轴。


方法:手动收缩坐标轴范围

在创建Basemap并绘制完地图元素后,手动调整坐标轴的范围,向中心收缩一定比例,为边界线留出足够的显示空间。具体步骤如下:

  1. 获取当前坐标轴的x/y范围;
  2. 按照一定比例向内收缩范围(比例可根据边界线宽度调整);
  3. 设置新的坐标轴范围。

修改后的完整代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 09:01:11