Как сделать 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 определяется относительно других панелей, которые добавляются. Хотя я доволен внешним размером панели, я не могу заставить фигуру соответствовать панель:
большая панель со всеми лапами должна быть масштабирована, чтобы соответствовать панели, сохраняя при этом ее соотношение сторон.
поэтому мне интересно,почему фигура не будет расширяться, чтобы соответствовать панели?
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')
что заставит изображение заполнить виджет, независимо от формы.
без автоматического соотношения сторон это приводит к: