matplotlib 1.3 中 plt.show() 阻塞问题
我正在写一个程序,目的是在我点击的点上绘制一个样条曲线,使用的是matplotlib网站上提供的LineBuilder
类(下面的代码中有我添加的注释来解释代码)。不过,我想在点击绘图窗口的某个区域时退出这个图形。我的代码在一台电脑上能正常工作(我想是matplotlib 1.2版本)。但在另一台电脑上(matplotlib 1.3版本),当我点击窗口的那个特定区域后,代码没有继续执行plt.show()
之后的部分。相反,当我关闭我的图形界面时,它才会执行plt.show()
之后的代码。
有没有人知道这可能是什么原因呢?我不太确定这个问题的具体情况。我知道如果我在plt.show()
中把block=False
打开,代码会继续执行,但我就无法构建我的线了,所以我觉得这可能和这个有关。不过我找不到这个设置是否有变化。代码如下:
from matplotlib import pyplot as plt
class LineBuilder:
def __init__(self, line):
self.line = line
self.xs = list(line.get_xdata())
self.ys = list(line.get_ydata())
self.cid = line.figure.canvas.mpl_connect('button_press_event', self)
def __call__(self, event):
print 'click', event
if event.inaxes!=self.line.axes: return
self.xs.append(event.xdata)
self.ys.append(event.ydata)
self.line.set_data(self.xs, self.ys)
self.line.figure.canvas.draw()
#If x.data < previous, plt.close ('all')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click to build line segments')
line, = ax.plot([0], [0])
linebuilder = LineBuilder(line)
plt.show ()
#Code that follows does not run in newer (?) version
1 个回答
0
Matplotlib有两种模式:一种是互动模式,另一种是非互动模式。我发现,根据你的系统配置,甚至是你启动脚本的方式(比如用系统命令行、互动命令行、专用命令行或者IDLE命令行等),这两种模式可能会有所不同。
如果你在代码的开头调用了 matplotlib.interactive(True)
,最好避免这样做。我在使用Matplotlib 0.99和1.3.1时,分别在python 2.65和2.75上试过,这样是有效的。另外,plt.ion()
也应该可以切换模式,不过我还没有测试过。