Python matplotlib.pyplot 2.0.0在运行时显示空绘图
最起码的例子:Python matplotlib.pyplot 2.0.0在运行时显示空绘图,python,matplotlib,Python,Matplotlib,最起码的例子: import matplotlib.pyplot as plt import time import numpy as np plt.ion() def plot(array): plt.figure() plt.plot(array) plt.show() for i in range(5): plot(np.linspace(-10.*i, 10*i, num=101)) time.sleep(15) 这将创建5个绘图,然后等待15秒
import matplotlib.pyplot as plt
import time
import numpy as np
plt.ion()
def plot(array):
plt.figure()
plt.plot(array)
plt.show()
for i in range(5):
plot(np.linspace(-10.*i, 10*i, num=101))
time.sleep(15)
这将创建5个绘图,然后等待15秒直到终止。将显示打印窗口,但在这15秒内,您可以看到打印窗口的框架,但内容是透明的(您可以看到下面其他窗口的内容;请参阅附件)。
这是在将matplotlib升级到2.0.0版后发生的
我希望绘图在程序终止之前是可见的,这在之前是可能的(至少在spyder IDE的ipython控制台中是如此)。我需要调整什么
编辑:
Python 2.7.12
matplotlib 2.0.0
ipython:5.1.0如果您使用的是交互模式,则应使用
plt.pause
而不是time.sleep
。以下是我的作品
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
def plot(array):
plt.figure()
plt.plot(array)
plt.show()
for i in range(5):
plot(np.linspace(-10.*i, 10*i, num=101))
plt.pause(15)
一般来说,对于交互式绘图,我发现如果您在开始时指定图形和轴ax
,plt.show
并使用ax.plots
使用plt.draw
和plt.pause
进行更新,效果会更可靠。比如说,
import matplotlib.pyplot as plt
import numpy as np
fig, axs = plt.subplots(5,1)
plt.ion()
plt.show()
def plot(ax, array):
ax.plot(array)
plt.draw()
for i in range(5):
plot(axs[i], np.linspace(-10.*i, 10*i, num=101))
plt.pause(15)
您可能需要检查
matplotlibrc
文件中是否有可能会影响某些内容的内容。还请注意,默认位置已从.matplotlib/matplotlibrc
移动到.config/matplotlib/matplotlibrc
,因此可能根本没有读入。谢谢,但是我到底应该看什么呢?/home/...config/matplotlib/根本不是文件。@BeateBier我正在用qt后端试验类似的问题。作为一种解决方法,你可以尝试另一种,我建议TkAgg。嗯,它有什么作用?它立即显示绘图,然后等待,但时间似乎不到15秒。在我的实际程序中,我不使用time.sleep()。我有其他代码正在运行,当它运行时,我希望能够查看之前创建的绘图。这在升级之前是可能的。我看到了绘图,而time.sleep
打开了一个图形,但没有绘制任何东西(matplotlib 1.4.3)。这对你不管用吗?如果没有,您可能需要在每次绘图后再次调用plt.draw()
。对不起,我以前没有完成。它在spyder IDE的IPython控制台中工作(升级之前)。我不能说它是否在常规ipython控制台中工作。(编辑了原始问题)我使用了:for I in range(3):plot(np.linspace(-10.*I,10*I,num=101))plt.pause(1)for I in range(3):plot(np.linspace(-10.*I,10*I,num=101))
对matplotlib的更新似乎没有做出任何影响此行为的更改,但不同的后端会做不同的事情,或者可能是spyder IDE交互模式与matplotlib 2.0之间的问题(我想这可能会被报告为错误)。draw文档建议使用fig.canvas.draw\u idle()
代替draw。若这不起作用,那个么将spyder标签添加到问题中,希望使用它的人能够提供帮助。实际上它是有效的。我正在使用plt.pause(0.1),它只是显示绘图,然后我的程序就开始了。但是这个命令实际上在做什么呢?为什么它不能与普通的plt.show()一起工作?