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

Python中直方图绘制-保存-关闭异常问题求助

解决Pandas直方图保存为空及窗口无法关闭的问题

问题原因分析

  1. 空图问题:原代码中df.hist()会自动创建新的Figure对象,和你提前定义的fig_verify完全无关,最后保存fig_verify自然是空文件;且你在关闭窗口后才执行保存操作,此时绘图资源已被释放。
  2. 窗口无法关闭:plt.close()默认仅关闭当前活跃的Figure,若存在多个Figure实例(比如手动创建的fig_verify和df.hist()生成的),会残留未关闭的窗口。

修正方案(两种可选)

方案一:指定绘图的Axes对象(推荐)

手动创建Figure和Axes,让直方图绘制在指定的画布上,确保保存的是正确的图:

import pandas as pd
import matplotlib.pyplot as plt

# 创建数据
data = {'Marks': [22, 87,  5, 43, 56,
                  73, 55, 54, 11, 20,
                  51,  5, 79, 31, 27]}

# 转为DataFrame
df = pd.DataFrame(data)

# 同时创建Figure和Axes,指定画布尺寸
fig_verify, ax = plt.subplots(figsize=(15,5))
# 让直方图绘制在指定的Axes上
df['Marks'].hist(grid=False, edgecolor='blue', bins=100, ax=ax)

# 先保存图片(绘图完成后立即保存,避免窗口关闭后资源释放)
fig_verify.savefig("hist.png")

# 显示窗口并设置自动关闭
plt.show(block=False)
plt.pause(1)
# 关闭所有绘图窗口,确保无残留
plt.close('all')

方案二:获取直方图所属的Figure

直接从df.hist()返回的Axes对象中获取对应的Figure进行保存:

import pandas as pd
import matplotlib.pyplot as plt

data = {'Marks': [22, 87,  5, 43, 56,
                  73, 55, 54, 11, 20,
                  51,  5, 79, 31, 27]}
df = pd.DataFrame(data)

# 绘制直方图,返回的是Axes二维数组(单列数据取[0][0])
ax = df.hist(grid=False, edgecolor='blue', bins=100, figsize=(15,5))[0][0]
# 获取该Axes所属的Figure
fig = ax.get_figure()

# 保存图片
fig.savefig("hist.png")

# 显示并关闭窗口
plt.show(block=False)
plt.pause(1)
plt.close('all')

关键改动点

  • 确保直方图绘制在你要保存的Figure对象上,避免出现"创建空画布+单独生成绘图"的分离情况。
  • 调整操作顺序:先保存图片,再关闭窗口,防止窗口关闭后绘图资源被销毁。
  • 使用plt.close('all')替代默认的plt.close(),确保所有绘图窗口都被彻底关闭。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:55:20