如何让FigureCanvas适合Panel?

时间:2011-06-16 15:19:53

标签: python wxpython matplotlib

我正在尝试使用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)

然后将此面板添加到另一个面板,其中相对于正在添加的其他面板确定其大小。虽然我对面板的外部尺寸感到满意,但我无法让这个数字适合面板:

enter image description here

具有所有爪子的大面板应缩放以适合面板,同时保持其纵横比。

所以我想知道,为什么这个数字不会扩展到适合小组?

1 个答案:

答案 0 :(得分:6)

您可以创建具有明确边界的轴对象,而不是从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