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

使用osmnx的plot_graph绘图时保存图像像素尺寸被截断

OSMnx路网绘制图像截断问题解决方案

问题根源

你遇到的截断、变形问题由4个错误用法导致:

  • matplotlib的figsize参数顺序为(宽度, 高度)(单位英寸),你传入的是(height/my_dpi, width/my_dpi),宽高顺序颠倒,直接导致图像变形、尺寸不匹配
  • 提前通过plt.subplots创建fig/ax后,又给plot_graph重复传入figsize、dpi参数,覆盖了提前定义的画布设置
  • savefig中添加了bbox_inches='tight'参数,该参数会自动裁切画布空白边缘,是你图像被截断的核心原因
  • 同时开启plot_graph的内置保存(save=True)和手动调用fig.savefig,两次保存逻辑冲突导致参数失效

修正后代码

import osmnx as ox
import matplotlib.pyplot as plt

# 提前定义所有参数
my_dpi = 96
bgcolor = "#061529"
north = -1.2656497829259836
south = -1.3099201363982285
east = 36.76232691456512
west = 36.71737787067992
desired_height = 9803
desired_width = 10000
# 注意figsize顺序是(宽度,高度)
fig, ax = plt.subplots(figsize=(desired_width/my_dpi, desired_height/my_dpi), dpi=my_dpi)
# 关闭坐标轴边距,完全贴合bbox范围
ax.set_axis_off()
fig.subplots_adjust(left=0, right=1, top=1, bottom=0, hspace=0, wspace=0)

# 加载路网
graph = ox.graph_from_bbox(north, south, east, west)

# 绘图,不开启内置save,不重复传figsize、dpi
ox.plot_graph(
    graph, 
    node_size=0, 
    bbox=(north, south, east, west),
    bgcolor=bgcolor,
    ax=ax,
    save=False,
    edge_color=roadColors,
    edge_linewidth=roadWidths, 
    edge_alpha=1,
    show=False
)

# 直接保存,不要加bbox_inches参数
fig.savefig(
    "nairobi_big3.jpg", 
    dpi=my_dpi, 
    format="jpg", 
    facecolor=fig.get_facecolor(), 
    transparent=False,
    pad_inches=0
)
plt.close(fig)

关键修改说明

  • 调整了figsize的宽高顺序,解决图像变形问题
  • 提前固定画布边距为0,避免OSMnx自动调整边距导致的内容偏移
  • 关闭了plot_graph的内置保存,仅使用手动savefig统一控制保存逻辑
  • 移除了bbox_inches='tight'参数,避免画布被自动裁剪
  • 新增show=False参数,避免绘图过程中弹出预览窗口占用内存(大尺寸图建议必加)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:54:05