2011-09-26 5 views
8

Estoy usando matplotlib en modo interactivo para mostrar al usuario un diagrama que los ayudará a ingresar un rango de variables. Tienen la opción de presionar "?" para mostrar esta gráfica, y luego se repetirá la solicitud de variables.modo interactivo matplotlib: determinar si todavía se muestra la ventana de la figura

¿Cómo sé si no volveré a dibujar este gráfico si todavía se muestra?

Superficialmente, tengo unas pocas cosas torpe (pseudo-ish) Código:

answer = None 
done_plot = False 
while answer == None: 
    answer = get_answer() 
    if answer == '?': 
     if done_plot: 
      have_closed = True 
      ##user's already requested a plot - has s/he closed it? 
      ## some check here needed: 
      have_closed = ????? 

      if have_closed == False: 
       print 'You already have the plot on display, will not re-draw' 
       answer = None 
       continue 
     plt.ion() 
     fig = plt.figure() 
     ### plotting stuff 
     done_plot = True 
     answer = None 
    else: 
     ###have an answer from the user... 

¿Qué puedo usar (en términos de plt.gca(), higo, etc ...) para determinar si necesito volver a trazar? ¿Hay algún estado que pueda verificar?

Muchas gracias,

David

+0

Creo que necesita más claridad en la pregunta. ¿Mantiene un registro de las cifras que han abierto? ¿Puede haber varias figuras a la vez o solo una figura abierta? –

Respuesta

12

En la misma línea que la respuesta unutbu de, también puede comprobar si una figura dada es aún abiertos con

import matplotlib.pyplot as plt 

if plt.fignum_exists(<figure number>): 
    # Figure is still opened 
else: 
    # Figure is closed 

El número de la figura de una cifra está en fig.number.

PD: Tenga en cuenta que el "número" en figure(num=…) en realidad puede ser una cadena: se muestra en el título de la ventana. Sin embargo, la figura todavía tiene un atributo number que es numérico: el valor original de la cadena num no se puede usar con fignum_exists().

PPS: Dicho esto, subplots(…, num=<string num>) recupera adecuadamente la figura existente con el número de serie dado número. Por lo tanto, las figuras todavía se conocen por su número de cuerda en algunas partes de Matplotlib (pero fignum_exists() no utiliza tales cadenas).

7
import matplotlib.pyplot as plt 
if plt.get_fignums(): 
    # window(s) open 
else: 
    # no windows 
+2

'matplotlib.pyplot.get_fignums()' hace casi lo mismo sin la importación adicional. – Avaris

+0

@Avaris: Gracias, eso es mejor. – unutbu

Cuestiones relacionadas