2012-08-01 61 views
6

我已经完成了搜索,但还没有找到正确的解决方案来解决我的问题。我正在对一些我想绘制的数据进行循环。在循环的每一步 - 我用plt.show()绘制图。但是,由于这是一个阻塞函数,所以我一直卡住,直到手动关闭窗口,然后循环继续并显示下一个图。在matplotlib中的python和更新数字

我想要做的就是能够绑定一个按键事件来关闭图形并继续循环(而不是使用鼠标将“X”移出图)。

如果这是不可能的,我想设置一个计时器来关闭图形并继续循环。

我所有的问题似乎都是为了处理plt.show()阻塞其他所有事情的方法 - 任何解决方法?

我的地块上的一些注释:它们使用相同的坐标轴,但包含散点图,填充框和注释 - 它们总是在变化。

谢谢!

回答

4

尝试使用ionmatplotlib.pyplot

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

更多信息有关ion和交互与非交互式的使用here

或者,如果你想要去的按钮按下的办法分配回调

def moveon(event): 
    pp.close() 

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

事件计时器比较棘手,因为show命令被阻塞,所以它可能不得不涉及线程。

+1

这是一个很好的答案。另外,你可以把它放到一个类似PyQT的GUI中,它可以让你更好地控制和根据需要进行更新。 – TimothyAWiseman 2012-08-01 17:52:14

+0

这不适合我。我使用了与提供的完全相同的代码,并且发生了奇怪的事情。发生的是所有的数字都是连续打开的(我没有按下按钮),他们没有任何东西。此外,“不回应”出现并关闭我的Python。 pp.ion()似乎会导致问题。帮帮我?? – mcfly 2012-08-01 19:03:46

+0

@mcfly:'ion()'选项意味着执行不会暂停 - 如果您想每次替换现有的图,只调用一次'figure'。 – jmetz 2012-08-01 19:11:28