2012-03-08 24 views
6

¿Es posible volver a abrir una figura cerrada (es decir, una el usuario X'd) en matplotlib? El código siguiente muestra el enfoque ingenuo:Matplotlib: ¿volver a abrir una figura cerrada?

In [14]: fig = figure(10) 

In [15]: close(fig) 

In [16]: fig.show() 

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 1410, in __call__ 
    return self.func(*args) 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-tk/Tkinter.py", line 495, in callit 
    func(*args) 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/matplotlib/backends/backend_tkagg.py", line 253, in idle_draw 
    self.draw() 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/matplotlib/backends/backend_tkagg.py", line 239, in draw 
    tkagg.blit(self._tkphoto, self.renderer._renderer, colormode=2) 
    File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/matplotlib/backends/tkagg.py", line 19, in blit 
    tk.call("PyAggImagePhoto", photoimage, id(aggimage), colormode, id(bbox_array)) 
TclError: this isn't a Tk application 

Estoy tratando de crear una figura con widgets en el mismo, por lo que una solución está disponible (acaba de hacer una nueva figura), pero me gustaría saber si el figure instancia es totalmente inútil después de ser cerrado.

+0

posible duplicado de [Matplotlib: cómo mostrar una figura que se ha cerrado] (http://stackoverflow.com/questions/31729948/matplotlib-how-to-show-a-figure-hathat-has-been- cerrado) –

Respuesta

0

Sí, al cerrar la figura, se elimina por completo.

+3

En realidad, eso no es cierto en absoluto. Cerrar una figura destruye el objeto de la ventana del gui toolkit (exactamente lo que depende del back-end), pero no el objeto figura. El objeto figura todavía existe, y aún puede guardarlo (por ejemplo, 'fig.savefig (...)' funcionará perfectamente después de que haya cerrado la figura.) –

+2

Sin embargo, me refiero a cerrar la figura a través del gui, no llamando a 'fig.close()' (Lo cual destruye cosas). –

+0

@JoeKington: ese es el caso en el que estoy interesado: cuando el usuario cierra una ventana a través de la GUI. Puse el MWE anterior porque asumí que estaba cerca (fig) y que "presionar X" hacía lo mismo. Si presiono x e intento 'fig.show()', obtengo la misma excepción. – keflavich

Cuestiones relacionadas