绘制线条而不阻塞执行

17 投票
4 回答
13432 浏览
提问于 2025-04-15 19:34

我正在使用matplotlib来绘制图表和图形。

当我用命令 show() 来显示图表时,我的代码在这个命令处停住了。

我想用新数据更新我的数值列表,然后在后台刷新图像。怎么才能做到这一点,而不需要每次都关闭图表窗口呢?下面是我正在使用的代码。

import pylab
a = (1,2,3,4)
pylab.plot(a)
pylab.show() # blocks here

4 个回答

0

在MacOS X上,我遇到了一个问题,就是解锁后只出现了一个白屏。最后,@tyleha的建议是直接在笔记本中使用%pylab,这个方法帮了我。实际上,当你使用已经不推荐使用的-pylab标志时,系统会建议这样做:

bash:~/Projects/plyground $ python -m IPython notebook -pylab
WARNING: `-pylab` flag has been deprecated.
Use `--matplotlib <backend>` and import pylab manually.
[E 21:09:05.446 NotebookApp] Support for specifying --pylab on the command line has been removed.
[E 21:09:05.447 NotebookApp] Please use `%pylab` or `%matplotlib` in the notebook itself.
3

如果你不是在使用IPython这个环境,而是在运行一个程序,那么你可能想要这样做:

pyplot.draw()

在调用plot()之后,可能还会接着调用

raw_input("Press enter when done...")

这样可以在绘制其他内容之前,先等待用户的操作。

如果你在程序开始时使用pyplot.ion(),那么通常可以省略draw()这一步。

pyplot.show()其实是一个无限循环,它会处理主绘图窗口中的各种事件,比如缩放、平移等等。

12

在IPython中,如果你用 -pylab 启动,它应该不会阻塞你的操作。

否则的话:使用 ion() 可以开启交互模式。这样一来, show() 就不会再阻塞你的系统了。每次调用 draw()plot(x, y) 都会更新你的图表。

ioff() 则是关闭交互模式。如果你要添加很多数据,而不想每次都更新每一个小细节,这个功能就很有用。

更多信息请查看: http://www.scipy.org/Cookbook/Matplotlib/Animations

撰写回答