重新打开时,Matplotlib图形无法正确显示

时间:2014-07-25 07:43:21

标签: python matplotlib

我有一个应用程序,我从python shell运行。我有一个主要人物

fig, (plt1, plt2, plt3) = pl.subplots(3, 1)

我有以下功能:

def do_select_features(self, line):
    global mode, fig
    mode = 'features'
    fig.canvas.mpl_connect('key_press_event', on_key)
    plot_wnd()
    pl.ion()
    pl.show()

def plot_wnd():
    plt1.cla()
    plt2.cla()
    plt3.cla()
    plt1.grid(True)
    plt2.grid(True)
    plt3.grid(True)
    plt1.hold(True)
    plt1.plot(rdata)
    plt1.plot([rng_current[0], rng_current[0]], [min(rdata), max(rdata)], 'r', lw=1)
    plt1.plot([rng_current[1], rng_current[1]], [min(rdata), max(rdata)], 'r', lw=1)
    zdata = compression.fill_in(compression.zigzag(normalize(rdata), zigzag))
    plt2.plot(zdata[rng_current[0]:rng_current[1]], color='r')
    plt2.plot(normalize(rdata)[rng_current[0]:rng_current[1]], color='b')
    plt3.plot(diff(zdata, normalize(rdata))[rng_current[0]:rng_current[1]], color='r')
    pl.draw()

def on_key(event):
    global rng_current

    if event.key == 'right' and (rng_current[1] + stp) < len(rdata):
        rng_current[0] += stp
        rng_current[1] += stp
        plot_wnd()

    if event.key == 'enter':
        f = h5py.File(db, "a")
        pdo.insert_group(f, mode, compression.zigzag(normalize(rdata[rng_current[0]:rng_current[1]]), zigzag))
        f.close
        print "Subseries added to ", mode, " database"

    if event.key == 'left' and (rng_current[0] - stp) > 0:
        rng_current[0] -= stp
        rng_current[1] -= + stp
        plot_wnd()

    if event.key == 'escape':
        pl.close()

因此,当我在命令行中时,我调用select_features,它会拉出数字,一切都很好。然后我用鼠标手动退出窗口或按ESC键(触发pl.close()。然后我想再次调用select_features,但它总是会显示一个全灰色的类似窗口。如何修复此问题?

1 个答案:

答案 0 :(得分:1)

尝试在功能中移动fig创建。关闭窗口时,会破坏图形,因此稍后对该函数的调用将无法再访问该图形。每次创建新窗口时都需要重新创建一个新图形。