你这个问题本质是:
在运行
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()
这样你的程序不会“卡住等你关图”,执行完会自动退出 ✔️