Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib.pyplot 2.0.0在运行时显示空绘图_Python_Matplotlib - Fatal编程技术网

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()一起工作?