Как сделать FigureCanvas соответствовать панели?

Я пытаюсь отобразить некоторые данные с помощью Matplotlib и wxPython. У меня есть цифра, которая добавляется к FigureCanvasWxAgg. Затем холст добавляется в BoxSizer и устанавливается в wx.Развернуть|wx.Все, BoxSizer на своей очереди устанавливается SetSizerAndFit.

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)

эта панель затем добавляется к другой панели, где ее размер get определяется относительно других панелей, которые добавляются. Хотя я доволен внешним размером панели, я не могу заставить фигуру соответствовать панель:

enter image description here

большая панель со всеми лапами должна быть масштабирована, чтобы соответствовать панели, сохраняя при этом ее соотношение сторон.

поэтому мне интересно,почему фигура не будет расширяться, чтобы соответствовать панели?

1 ответов


вместо своей оси от add_subplot метод, вы можете создать объект axes с явными границами. Так вместо

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

использовать

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

четыре числа-это левый край, нижний край, ширина и высота осей в долях ширины и высоты рисунка. [0,0,1,1] развернет изображение, чтобы соответствовать всей фигуре. Конечно, есть еще проблемы с соотношением сторон. Если вы хотите сохранить соотношение сторон вашего изображения, то оно не всегда будет заполнять все пространство виджета (в зависимости от формы виджета). Если изменения соотношения сторон в порядке, вы можете вызвать im_show следующим образом

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

что заставит изображение заполнить виджет, независимо от формы.

без автоматического соотношения сторон это приводит к:

enter image description here