matplotlib中的“动态”填充问题

时间:2015-05-11 08:26:48

标签: python python-2.7 matplotlib pyqt pyqt4

我一直在尝试在matplotlib图上设置固定大小的填充(以像素为单位)。我从来没有能够在互联网上找到适合我需求的解决方案,所以我不得不为此做一些解决方法,这是通过以下代码完成的:

def resizeEvent(self,e):
    windowWidth=self.geometry().width()
    windowHeight=self.geometry().height()
    #print(windowWidth,windowHeight)
    figure.subplots_adjust(left=100.0/windowWidth,right=1-100.0/windowWidth, top=1-100.0/windowHeight,bottom=100.0/windowHeight)

手动调整窗口大小时它可以正常工作(我们每边都有100px的填充)。

不幸的是,当点击最大化时,填充(在0到1之间)似乎等于它以前的值,即使打印返回正确的窗口大小(1920px)。 再次点击 Restore Down ,然后将填充设置为我们最大化时应该具有的值。

Explanation with a picture :

我真的不知道这里发生了什么,我一定错过了什么...... 如果您需要更多信息,例如更多代码,请告诉我。

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

我过去曾遇到过类似的问题(这个数字在启动时没有调整大小),并将数字子图重新计算到draw方法。像这样的东西(我使用tight_layout,但你明白了):

class PlotWidget(FigureCanvas):

    def __init__(self):
        self.__resizing_needed = True

    def draw(self):
        if self.__resizing_needed:
            self.__resizing_needed = False
            try:
                self.figure.tight_layout()
            except ValueError:
                # Set the minimumSize of this widget to prevent this
                print('Plot too small.')

        super(PlotWidget, self).draw()

    def resizeEvent(self, event):
        self.__resizing_needed = True
        super(PlotWidget, self).resizeEvent(event)