Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Devolver figura desde metodo

Estas en el tema de Devolver figura desde metodo en el foro de Python en Foros del Web. Hola, como hago para, desde un metodo, devolver una figura sin que se muestre en forma de pop-up, me explico: En un determinado metodo estoy ...
  #1 (permalink)  
Antiguo 27/03/2014, 06:51
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 11 años
Puntos: 0
Devolver figura desde metodo

Hola, como hago para, desde un metodo, devolver una figura sin que se muestre en forma de pop-up, me explico:


En un determinado metodo estoy generando una figura asi:

Código Python:
Ver original
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. def drawPlot(x,y, y_O):
  5.  
  6.     n_groups = len(x)
  7.     fig, ax = plt.subplots()
  8.     index = np.arange(n_groups)
  9.     bar_width = 0.35
  10.     opacity = 0.4
  11.     error_config = {'ecolor': '0.3'}
  12.     rects1 = plt.bar(x, y, bar_width, alpha=opacity, color='b',label='label1')
  13.  
  14.     for i in range(len(x)):
  15.         x[i] = x[i] + bar_width
  16.  
  17.     rects2 = plt.bar(x , y_O, bar_width, alpha=opacity, color='r',label='label2')
  18.  
  19.     plt.xlabel('Reading')
  20.     plt.ylabel('Value (%)')
  21.  
  22.     plt.xticks(index + bar_width , (x))
  23.     plt.legend()
  24.  
  25.     plt.tight_layout()
  26.  
  27.     return fig

El problema que tengo es que, cuando desde el codigo de la mainWindow hago esto:

Código Python:
Ver original
  1. thePlot = tm.drawPlot(x,y,y_O, y_L)
  2. MyCanvas = FigureCanvas(thePlot)
  3. navi_toolbar = NavigationToolbar(MyCanvas, self)
  4.                    
  5. self.ui.verticalLayoutGraph2_1.addWidget(navi_toolbar)
  6. self.ui.verticalLayoutGraph2_1.addWidget(MyCanvas)

Todo funciona bien, la grafica se muestra dentro de la mainWindow, pero ademas me sale una ventana pop-up con la misma grafica.

Me gustaria saber como evitar que salga esa ventana con la grafica, ya que yo solo la quiero en la mainWindow.

Como se puede ver, en el metodo no hay niguna llamada del tipo .show() o .draw() por lo que no entiendo por que sale esa ventana pop-up con la figura.
  #2 (permalink)  
Antiguo 01/04/2014, 00:53
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 11 años
Puntos: 0
Respuesta: Devolver figura desde metodo

Nadie sabe nada al respecto?? voy bastante perdido con esto...
  #3 (permalink)  
Antiguo 01/04/2014, 09:55
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Devolver figura desde metodo

Te recomiendo iniciar el programa en el debugger, e ir paso a paso para ver en qué etapa se muestra cada ventana. Se me hace que estás haciendo sin querer un segundo llamado a la función que crea el gráfico.
  #4 (permalink)  
Antiguo 02/04/2014, 00:32
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 11 años
Puntos: 0
Respuesta: Devolver figura desde metodo

Gracias AlvaroG,

Pero la aplicacion completa es muy larga y compleja, por lo que no creo que me sea de gran ayuda el ir paso a paso.

Segun parece, esa ventana pop-up con la misma grafica que luego se mostrara en la mainWindow, aparece en algun punto del metodo def drawPlot(x,y, y_O):

Creo que lo he descubierto porque, si al final del metodo pongo esto:

Código Python:
Ver original
  1. ...
  2. ...
  3. ...
  4. plt.xticks(index + bar_width , (x))
  5. plt.legend()
  6. plt.tight_layout()
  7.  
  8. plt.close()
  9.  
  10. return fig

Esa llamada a plt.close() hace que la grafica pop-up ya no se muestre de manera fija, pero aun sigue apareciendo durente algunos milisegundos, lo que hace un mal efecto cada vez que llamo al metodo drawPlot(x,y, y_O)

Con lo cual, el problema esta casi casi solucionado, solo necesito que alguien me aclare, dentro del codigo de drawPlot(x,y, y_O): donde se muestra la grafica, porque como se puede ver no hay ninguna llamada a .show() o a .draw()

Gracias

Última edición por edanvar; 02/04/2014 a las 00:37
  #5 (permalink)  
Antiguo 02/04/2014, 02:06
 
Fecha de Ingreso: octubre-2013
Mensajes: 59
Antigüedad: 11 años
Puntos: 0
Respuesta: Devolver figura desde metodo

Al final encontre la solucion yo mismo, bastaba con agregar plt.ioff() al principio del metodo, segun parece esto evita que las graficas se muestren en un pop-up, pero sin embargo luego las sigo teniendo disponibles en la mainWindow y se me muestran perfectamente en ella.

Asi que solucionado.

De todos modos, me sigue quedando la duda de en que parte del codigo del metodo se muetran las graficas en un pop-up.....pero bueno, ya me da igual....

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:52.