Как заставить FigureCanvas соответствовать панели? - PullRequest
6 голосов
/ 16 июня 2011

Я пытаюсь отобразить некоторые данные, используя Matplotlib и wxPython.У меня есть рисунок, который добавлен к FigureCanvasWxAgg.Затем холст добавляется в BoxSizer и устанавливается в wx.EXPAND | wx.ALL, а 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 Ответ

6 голосов
/ 16 июня 2011

Вместо получения осей из метода add_subplot вы можете создать объект осей с явными границами.Поэтому вместо

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...