当图1未关闭时,Matplotlib崩溃

时间:2015-06-09 10:14:48

标签: python-3.x matplotlib

我正在使用Python 3.4使用Matplotlib绘制多个数字。

当多个数字打开并关闭窗口时关闭第一个数字(即一旦所有其他数字都关闭),python不会崩溃。

但是,如果我关闭首先绘制的第一个数字,然后关闭其余的Python崩溃。

好像你需要按照这样的顺序关闭窗口,使得打开的第一个窗口必须最后关闭。还有其他人经历过并且有解决方案吗?

这是一个简单的示例代码,可用于验证:

import matplotlib.pyplot as plt
plt.figure(1) # the first figure
plt.plot([1,2,3])
plt.figure(2) # a second figure
plt.plot([4,5,6]) 
plt.show()

4 个答案:

答案 0 :(得分:2)

正如所讨论的那样on the IPython bug tracker这是TCL / TK库中的一个错误,它在Windows上附带了python 3.4。

通过使用不同的gui框架,将后端更改为Qt可以解决问题。

答案 1 :(得分:1)

我设法解决这个问题的方法是使用Qt4作为matplotlib后端。

导入matplotlib后,只需添加以下两行代码。

import matplotlib as mpl
mpl.rcParams['backend'] = "qt4agg"
mpl.rcParams['backend.qt4'] = "PySide"

这就是我在Python 3上所做的,并且没有关闭错误

答案 2 :(得分:0)

我用它来有效地完成plt.close('all')应该做的事情:

def closeall(): # this closes all figures in reverse order
    l = plt.get_fignums()
    l.reverse()
    for a in l:
        plt.close(a)

答案 3 :(得分:-2)

每当您绘制多个数字时,请不要使用plt.show,在figure实例中单独创建数字,然后使用Axes添加add_subplot。这是一个例子:

import matplotlib.pyplot as plt

fig1 = plt.figure()
ax1 = fig1.add_subplot(211) # the first subplot in the first figure
ax1.plot([1,2,3])
ax2 = fig1.add_subplot(212) # the second subplot in the first figure
ax2.plot([4,5,6])
plt.suptitle('Easy as 1,2,3')
fig1.show()

fig2 = plt.figure()
ax3 = fig2.add_subplot(211) # the first subplot in the second figure
ax3.plot([4,5,6]) 
ax4 = fig2.add_subplot(212) # the second subplot in the second figure
ax4.plot([4,5,6])
plt.suptitle('Easy as 1,2,3')
fig2.show()

通过这样做,即使图表处于活动状态,您仍然可以使用python shell。这是绘制多个图的最佳方法。