使用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
相关产品推荐
相关产品推荐

