解决:在运行 plt.show`时,程序会等待你手动关闭图片窗口才能继续往下执行

时间:2025-03-31 20:52:43

你这个问题本质是:

在运行 plt.show() 时,程序会等待你手动关闭图片窗口才能继续往下执行。

这其实是 matplotlib 的默认行为 —— 它会弹出一个交互式窗口让你“看完图再走”。


✅ 为什么会这样?

你在程序中使用了:

import matplotlib
matplotlib.use('TkAgg')

然后绘图后使用了:

plt.show()

这两个配合起来,会打开一个交互式窗口,阻塞主线程,直到你手动关闭它,所以程序最后会“卡住”。


✅ 解决方案(根据你的需求选)


✅ 方法1:不显示图,只保存图像

如果你只是想保存图,不需要弹窗看图,你可以干脆 删掉或注释掉所有 plt.show()

# plt.show()  # 不再弹窗

你已经使用 plt.savefig() 保存图像了,plt.show() 只是让你看图的,不必须!


✅ 方法2:保存图并关闭窗口(不等待)

如果你想保存 + 自动关闭,也可以在 plt.savefig() 后调用:

plt.close()

比如改成这样:

plt.savefig('ROC-figure')
plt.close()

这会把图保存后立刻关掉,程序不会等你点“×”。


✅ 方法3:切换为非交互式后端

如果你不想看到弹窗,又懒得删 plt.show(),也可以一开始切换为非交互式后端,例如用 Agg

import matplotlib
matplotlib.use('Agg')

这会告诉 matplotlib 用“纯保存不弹窗”的方式绘图(适合服务器、自动化训练场景)。


✅ 推荐你这样修改前几行代码

import matplotlib
matplotlib.use('Agg')  # 改成非交互式后端
import matplotlib.pyplot as plt

然后在绘图代码后这样写:

plt.savefig('some_figure.png')
plt.close()

这样你的程序不会“卡住等你关图”,执行完会自动退出 ✔️