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

Jupyter运行Matplotlib代码图片可显示但保存为空如何修复?

问题原因

导致保存为空图片的核心原因有2个:

  1. 路径处理逻辑错误:os.path.join拼接路径后调用.replace("/", "")会删除Unix系统下的路径分隔符,导致输出路径不符合预期,若test目录不存在会触发静默写入失败,最终生成空白文件。
  2. 冗余的轴设置与绘图接口混用:显式创建ax对象后使用隐式plt接口操作,叠加冗余的NullLocator设置,可能触发matplotlib边界计算异常,使用bbox_inches="tight"时误将所有内容判定为超出边界被裁剪。

修复代码

如果需要完全无边距保存原图,推荐使用匹配图片尺寸的画布方案,避免边界裁剪问题:

import numpy as np
import os
import matplotlib.pyplot as plt
import matplotlib.ticker as tkr

# 读取图片
path = 'photo.jpg'
im = plt.imread(path)
dpi = 100 # 可根据需求调整输出分辨率

# 创建匹配图片尺寸的画布,完全消除边距
fig, ax = plt.subplots(figsize=(im.shape[1]/dpi, im.shape[0]/dpi), dpi=dpi)
fig.subplots_adjust(left=0, right=1, top=1, bottom=0)

ax.imshow(im)
ax.axis("off") # 直接用显式ax接口操作,已隐藏刻度和边框,无需额外设置NullLocator

# 先创建输出目录避免写入失败
os.makedirs("test", exist_ok=True)
filename = os.path.basename(path).split(".")[0]
output_path = os.path.join("test", filename+".png") # 不要删除路径分隔符

# 保存时不需要额外调整边界,画布已经匹配图片尺寸
fig.savefig(output_path, dpi=dpi)
plt.show()
plt.close()

轻量调整方案

如果你需要保留bbox_inches="tight"的原有配置,只需要删除错误的路径处理、冗余的轴设置、新增目录创建逻辑即可正常保存:

plt.axis("off")
os.makedirs("test", exist_ok=True)
filename = os.path.basename(path).split(".")[0]
output_path = os.path.join("test", filename+".png")
plt.savefig(output_path, bbox_inches="tight", pad_inches=0.0)
plt.show()
plt.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:02