Python和Matplotlib中如何更新图形

6
我在SO上搜索了一下,但似乎没有找到适合我的问题的“解决方案”。我正在对一些数据进行循环处理以进行绘图。在每个循环步骤中,我使用plt.show()显示图形。然而,由于这是一个阻塞函数,直到我手动关闭窗口后,循环才会继续,下一个图形才会显示出来。
我想做的是能够绑定按键事件来关闭图形并继续循环(而不是使用鼠标点击“X”按钮关闭)。如果不可能,我希望设置一个计时器来关闭图形并继续循环。我的所有问题似乎都与plt.show()阻塞了其他一切有关,有什么办法可以解决吗?
关于我的图形,需要注意以下几点:它们使用相同的坐标轴,但包含散点图、填充框和注释,这些都在不断变化。
谢谢!
1个回答

5

你可以尝试使用来自 matplotlib.pyplotion

import matplotlib.pyplot as pp
pp.ion()
fig = pp.figure()

关于ion和互动与非互动用法的更多信息在此处

或者,如果您想使用按钮按下的方式,请分配回调函数。

def moveon(event):
    pp.close()

cid = fig.canvas.mpl_connect('key_press_event', moveon)
pp.show()

事件计时器更为棘手,因为show命令是阻塞的,所以可能需要涉及线程处理。


1
这是一个很棒的回答。此外,您可以使用像PyQT这样的GUI将其放入其中,这为您提供更多的控制和根据需要进行更新的能力。 - TimothyAWiseman
这对我没有用。我使用了与提供的完全相同的代码,但出现了奇怪的事情。发生的是所有数字都连续打开(我没有按任何按钮),它们里面什么也没有。此外,“未响应”显示并关闭了我的Python。pp.ion()似乎引起了问题。求助? - mcfly
@mcfly:ion()选项表示执行不会暂停 - 如果您想每次替换现有图形,请仅调用一次figure函数。 - jmetz
@mcfly: 或者,如果你想让程序暂停执行,可以使用添加回调函数的方法(但不要使用 ion()!) - jmetz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接