for循环绘制pyplot图表时如何在下一张展示前关闭并兼容click交互
解决方案
直接修改循环内的绘图逻辑,主动管理画布生命周期即可,修改后代码如下:
import numpy as np import matplotlib.pyplot as plt import click # 假设Data、Data2、x为你预先定义好的变量 List = [] for q in np.arange(0, len(x)): # 新建空白画布,避免上一轮绘图内容残留 plt.figure() Thing = Data[x[q]-100:x[q]+400] Thing2 = Data2[x[q]-100:x[q]+400] plt.plot(Thing) plt.plot(Thing2) # 阻塞展示,等用户手动关闭窗口后再执行后续逻辑 plt.show(block=True) if click.confirm('Do you want to save?', default=True): List.append(x[q]) # 主动关闭当前画布,释放内存资源 plt.close()
关键改动说明
- 每次循环开头调用
plt.figure()创建全新的空白画布,从根源上避免上一轮的绘图内容叠加到新图上 - 给
plt.show()显式指定block=True参数,强制绘图窗口阻塞代码执行,只有用户关闭窗口后才会弹出click的确认选项,完全规避两者的交互冲突 - 每轮循环末尾调用
plt.close()主动释放画布资源,就算出现窗口未手动关闭的情况,也不会残留多余窗口占用内存
如果不需要每次新建画布,也可以将plt.figure()替换为plt.clf()清空当前画布内容,资源占用更低。
内容的提问来源于stack exchange,提问作者SAPJ
相关产品推荐
相关产品推荐

