2011-06-16 11 views
6

Estoy tratando de mostrar algunos datos usando Matplotlib y wxPython. Tengo una figura que se agrega a FigureCanvasWxAgg. El lienzo se agrega a un BoxSizer y se establece en wx.EXPAND | wx.ALL, el BoxSizer en su turno lo establece SetSizerAndFit.¿Cómo hacer que FigureCanvas se ajuste a un panel?

self.figure = Figure(None, dpi = 75) 
self.displaycanvas = FigureCanvas(self, -1, self.figure) 
self.axes = self.figure.add_subplot(111) 
self.axes.imshow(self.data, interpolation="quadric")  

self.mainSizer = wx.BoxSizer() 
self.mainSizer.Add(self.displaycanvas, 1, wx.EXPAND|wx.ALL, 5) 
self.SetSizerAndFit(self.mainSizer) 

Este panel se agrega a otro panel, donde su tamaño se determina en relación con otros paneles que se están agregando. Mientras estoy feliz con el tamaño exterior del panel, no puedo obtener la cifra de encajar el panel:

enter image description here

El gran panel con todas las patas debe ser escalada para encajar el panel, mientras manteniendo su relación de aspecto.

Así que me pregunto, por qué la figura no se ampliará para adaptarse al panel?

Respuesta

6

En lugar de obtener los ejes del método add_subplot, puede crear un objeto de ejes con límites explícitos. Así que en lugar de

self.axes = self.figure.add_subplot(111) 

uso

self.axes = self.figure.add_axes([0,0,1,1]) 

Los cuatro números son el borde izquierdo, borde inferior, la anchura y la altura de los ejes en fracciones de anchura figura y altura. [0,0,1,1] ampliará la imagen para ajustarse a la figura completa. Por supuesto, todavía hay problemas con la relación de aspecto. Si desea mantener la relación de aspecto de su imagen, entonces no siempre llenará todo el espacio del widget (dependiendo de la forma del widget). Si los cambios de relación de aspecto están bien, puede llamar im_show como esto

self.axes.imshow(self.data, interpolation="quadric", aspect='auto') 

lo que hará que la imagen llene el widget, sin importar la forma.

Sin la relación de aspecto automático, esto se traduce en:

enter image description here

+1

Excelente @Stephen, sigo corriendo en estos 'pequeños' errores que son simplemente el resultado de ejemplos copia pegar sin entender lo que realmente hacen. –

+0

Ah, y he cambiado la subtrama a ejes en todas partes, lo que hace que todo se vea mucho mejor. Todo lo que necesito cambiar es hacer que el fondo gris use el color de fondo del panel. –

+1

Puede configurar eso con el método 'set_facecolor()' de su instancia 'Figure'. –

Cuestiones relacionadas