我对Matplotlib的交互功能有疑问。我运行了以下程序并收到了一个冻结的空图窗口。
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
x = np.arange(0, 4*np.pi, 0.1)
y = [np.sin(i) for i in x]
plt.plot(x, y, 'g-', linewidth=1.5, markersize=4)
plt.show()
如果我删除了'plt.ion()'语句,那么它工作得很好。我使用IDLE,并在Python 3.2.2中安装了Matplotlib 1.2.x版软件包。
我希望它是互动的,但我得到了一个不友好的非交互式窗口。有人可以解释我所缺少的东西吗?提前谢谢。
答案 0 :(得分:45)
我遇到了here找到的链接,它解决了我的问题。
似乎在通过plt.ion()
启用交互模式后,需要临时暂停pyplot,以便通过plt.pause(0.0001)
更新/重绘自身。这是我做的,它的工作原理!
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> plt.ion()
>>> x = np.arange(0, 4*np.pi, 0.1)
>>> y = [np.sin(i) for i in x]
>>> plt.plot(x, y, 'g-', linewidth=1.5, markersize=4)
>>> plt.pause(0.0001)
>>> plt.plot(x, [i**2 for i in y], 'g-', linewidth=1.5, markersize=4)
>>> plt.pause(0.0001)
>>> plt.plot(x, [i**2*i+0.25 for i in y], 'r-', linewidth=1.5, markersize=4)
>>> plt.pause(0.0001)
如果您在IDLE控制台中尝试了这一点,请注意到目前为止所有内容都已显示,但图形窗口冻结且无法退出。要解冻它,请键入以下最后一个语句
>>> plt.show(block=True)
现在窗口可以关闭。
答案 1 :(得分:6)
我遇到了完全相同的问题。在ipython中有魔法%matplotlib
,它解决了我的问题。至少现在我可以输入plt.figure()
(假设已调用import matplotlib.pyplot as plt
)并获得完全互动的响应数字。
但是,我仍然有兴趣知道这个魔法完全导入了什么才能理解这个问题。