我正在使用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()
答案 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。这是绘制多个图的最佳方法。