Matplotlib ion()函数无法交互

Matplotlib ion()函数无法交互,matplotlib,Matplotlib,我对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()'语句,那么它就

我对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,Matplotlib版本1.2.x包安装在Python 3.2.2中


我希望它是交互式的,但我得到了一个不友好的非交互式窗口。有人能告诉我我错过了什么吗?提前谢谢。

我偶然发现了这个链接,它回答了我的问题

似乎在通过
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)
如果您在空闲控制台中尝试此操作,请注意,到目前为止,除了图形窗口冻结且无法退出之外,所有内容都显示出来。要解除冻结,请键入以下最后一条语句

>>> plt.show(block=True)

现在窗口可以关闭了。

我遇到了完全相同的问题。在ipython中有一个神奇的
%matplotlib
,它为我解决了这个问题。至少现在我可以键入
plt.figure()
(假设调用了
import matplotlib.pyplot as plt
)并获得一个完全交互式的响应图形


然而,我仍然有兴趣知道这个魔术到底导入了什么,以便能够理解这个问题。

因此,如果您省略了
plt.ion()
,它会像您所期望的那样工作。只是不要使用plt.ion(),除非您在python控制台中,交互部分是控制台不会冻结。我的意思是,如果我通过空闲控制台输入每条语句,那么我就会得到那个糟糕的结果@塞伯格:我希望它是交互式的,这样我可以在打印语句时看到结果。谢谢-我一直有这个精确的问题。添加毫秒暂停已防止打印窗口冻结。
pause
真正做的是调用
draw()
。你可以直接调用
draw()
。事实上,尼尔已经知道了一些事情。看起来pause()实际上调用了draw(),这意味着如果使用pause()就不要调用draw(),因为不需要调用两次。我的绘图性能提高了很多,因为我已经取出了draw()并只调用了一个短暂停(0.0001)!!!!谢谢我发现,当我在Eclipse(/liclipse)中运行python时,这是必要的,但在终端中运行python时则不是@NeilTraft,在我的例子中,仅仅调用“draw()”是不够的。我在6年后写下了答案:根据当前交互模式的文档,它不适用于IDLE;看见这可能与答案发布时有所不同。经过多年的稳定使用后,这突然发生在我身上。2016年的前几天感觉就像2006年一样,但IPython中的
%matplotlib
魔术也为我解决了这个问题。荣誉