Python中如何等待用户关闭当前matplotlib figure后再打开下一个
解决方案
问题根源
plt.waitforbuttonpress()的触发条件为任意鼠标点击、键盘按键,你在图表上进行点击交互时会直接结束当前轮阻塞,进入下一轮循环生成新图,这是不符合需求的核心原因- 原有代码没有正确利用
plt.show()的阻塞特性
修改代码
for i in range(0, mvmt_array.shape[0], BINS_IN_HOUR): mvmt_day = mvmt_array[i:i+BINS_IN_HOUR] fig, ax = plt.subplots() ax = sns.heatmap(mvmt_day.T) ax.invert_yaxis() # 绑定点击事件,添加ax=ax避免闭包陷阱,保证每轮绑定的是当前ax对象 fig.canvas.mpl_connect( 'button_press_event', lambda event, ax=ax: onclick(event, ax)) # 移除plt.waitforbuttonpress(),使用阻塞模式的show,仅关闭窗口时才结束阻塞 plt.show(block=True)
说明
plt.show(block=True)会让代码一直保持阻塞状态,只有当你手动关闭当前弹出的图表窗口时,才会结束阻塞进入下一轮循环,窗口打开期间的所有点击交互操作都可以正常触发,不会影响阻塞状态。
如果你是在Jupyter Notebook环境中运行代码,需要先执行魔法命令%matplotlib qt切换到独立窗口渲染模式,否则内嵌图表不支持上述阻塞逻辑。
内容的提问来源于stack exchange,提问作者Ossz
相关产品推荐
相关产品推荐

