如何阻止PyCharm运行matplotlib代码时覆盖已有绘图结果
解决PyCharm中matplotlib多次运行绘图被覆盖的方案
你可以通过修改代码或者调整PyCharm设置两种方式实现每次运行生成独立绘图,两种方案可以单独使用也可以搭配使用,稳定性更高。
方案1:添加代码适配(全环境通用,优先级最高)
matplotlib默认会复用当前进程的活动画布,旧画布未主动释放时就会出现新绘图覆盖旧图的问题,添加少量代码即可彻底避免该问题:
仅需弹出独立绘图窗口场景
每次绘图前主动创建新画布,运行结束后释放画布资源即可:
import matplotlib.pyplot as plt import numpy as np # 新建独立画布,不会复用之前的画布实例 plt.figure() x = np.linspace(-5, 5, 100) plt.plot(x, np.sin(x)) plt.show() # 释放当前画布资源 plt.close()
需要自动保存绘图到本地场景
给文件名添加时间戳/随机数保证文件名唯一,永远不会出现覆盖:
import matplotlib.pyplot as plt import numpy as np from datetime import datetime plt.figure() x = np.linspace(-5, 5, 100) plt.plot(x, np.sin(x)) # 用毫秒级时间戳生成唯一文件名 save_name = f"sin_plot_{datetime.now().strftime('%Y%m%d%H%M%S%f')}.png" plt.savefig(save_name) plt.show() plt.close()
方案2:调整PyCharm设置(无需修改代码)
关闭绘图内嵌工具窗口
PyCharm默认会把所有绘图放到侧边的科学工具窗口中复用渲染区域,是覆盖问题的常见诱因,关闭该设置即可:
- 打开PyCharm设置:Windows/Linux按
Ctrl+Alt+S,Mac按Command+, - 依次进入
Tools>Python Scientific - 取消勾选 Show plots in tool window,修改后每次
plt.show()都会弹出独立的系统绘图窗口,不会互相覆盖
开启多进程并行运行
如果多次运行时未关闭旧的运行进程,同进程内的画布会被复用,开启并行运行即可隔离每次运行的资源:
- 点击右上角运行配置下拉框,选择
Edit Configurations - 找到对应Python文件的运行配置,勾选 Allow parallel run 保存即可
内容的提问来源于stack exchange,提问作者akkh
相关产品推荐
相关产品推荐

