Python / Matplotlib 1.0.1在单击时不会打开新图

时间:2012-02-24 12:06:42

标签: python matplotlib

我遇到Matplotlib 1.0.1

的问题

我创建了一个数字,当我点击图中时,我使用onclick事件来做事情。有一点是,它必须创建一个包含新数据的新数字。这完全适用于Matplotlib 0.99.3,在那里我开发了脚本,但是现在一个同事在他的机器上尝试了它,它有matplotlib 1.0.1(和python 2.6而不是2.7),并且没有显示图。

但是,我认为该图是创建的,但未显示,因为如果我关闭第一个图,脚本没有结束,它仍然在运行。

这是一个简单的示例代码:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

a = [1,2,3]
b = [4,2,9]

line = ax.plot(a,b)

def onclick(event):
    print "clicked"
    a = [7,8,9]
    b = [1,9,20]
    fig2 = plt.figure()
    ax_single = fig2.add_subplot(111)
    line2 = ax_single.plot(a,b)

cid = fig.canvas.mpl_connect('button_press_event',onclick)
plt.show()

这是matplotlib 1.0.1中的(已知)错误吗?有什么方法吗?

THX。

2 个答案:

答案 0 :(得分:2)

添加一个简单的fig2.show()对我有用。阅读How-to以获取更多信息!

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

a = [1,2,3]
b = [4,2,9]

line = ax.plot(a,b)

def onclick(event):
    print "clicked"
    a = [7,8,9]
    b = [1,9,20]
    fig2 = plt.figure()
    ax_single = fig2.add_subplot(111)
    line2 = ax_single.plot(a,b)
    fig2.show()

cid = fig.canvas.mpl_connect('button_press_event',onclick)
plt.show()

在主循环启动后matplotlib处理数字的方式确实是1.0.0的变化。

答案 1 :(得分:0)

您可以在开头将Pyplot置于交互模式:

plt.ion()

然后以类似

的方式结束你的程序
raw_input('Press enter when done...')

(而不是show())。

使用Matplotlib 1.0更新了{​​{1}}和交互模式的语义。您可以在StackOverflow上获取有关此内容的更多信息:Exact semantics of Matplotlib's "interactive mode" (ion(), ioff())?。我知道使用交互模式(show())通常更方便。另一个重要的一点是,在交互模式下,只有ion个函数会自动绘制/重绘图(而不是pyplot.*个方法)。