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

Matplotlib固定宽高比致地图截断的解决方法

解决Matplotlib地图完整显示+固定figtext位置的问题

要同时满足完整显示指定经纬度范围和figtext位置不偏移,核心思路是放弃给坐标轴设置固定宽高比,转而让画布(figure)的尺寸匹配你指定的经纬度范围的宽高比,具体步骤如下:

  • 先计算你要显示的经纬度范围的宽高比:

    min_lon, max_lon = 100, 120
    min_lat, max_lat = 20, 45
    # 计算数据范围的宽高比(X轴范围/Y轴范围)
    data_aspect = (max_lon - min_lon) / (max_lat - min_lat)
    
  • 根据这个比例设置画布尺寸,比如固定画布宽度为10,自动计算高度:

    fig_width = 10
    fig_height = fig_width / data_aspect
    fig, ax = plt.subplots(figsize=(fig_width, fig_height))
    
  • 之后正常绘制地图(不管用basemap、cartopy还是普通plot),不需要给ax设置aspect相关参数,默认的scaled模式会让坐标轴填满画布,完整显示所有经纬度范围。

  • 最后添加figtext时,用默认的归一化坐标(0-1,相对于整个画布),位置就会固定,不会因为数据范围变化偏移:

    plt.figtext(0.02, 0.02, "地图标注文本", fontsize=10)
    

为什么之前的方法不行?

  • 直接给axes设置固定aspect ratio时,Matplotlib会强制坐标轴维持这个比例,如果数据范围宽高比和设置的比例不匹配,就会截断超出比例的部分来保证显示比例。
  • 用equal或scaled但不调整画布尺寸的话,画布本身的宽高比和数据范围不匹配,figtext基于画布的位置就会随着坐标轴的缩放而相对偏移。

扩展:如果用地理投影(如Cartopy)

如果用了带投影的地图,数据范围的宽高比需要考虑投影后的实际比例,比如可以先绘制一次获取坐标轴的范围,再计算比例调整画布尺寸,或者直接根据投影的参数估算比例,核心逻辑还是让画布尺寸匹配投影后数据的宽高比。

内容的提问来源于stack exchange,提问作者scottthomaswx

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:35:59