【问题标题】:Issue with "dynamic" padding in matplotlibmatplotlib 中的“动态”填充问题
【发布时间】:2015-07-21 16:08:32
【问题描述】:

我一直在尝试在我的 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)

手动调整窗口大小时效果很好(我们每边都有 100 像素的填充)。

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

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

感谢您的热心帮助:)

【问题讨论】:

    标签: python python-2.7 matplotlib pyqt pyqt4


    【解决方案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)
    

    【讨论】:

    • 是的,在这种情况下确实需要重绘。但由于我的绘图有很多数字,所以 draw() 有点慢,所以我让应用程序重绘最大化并仅恢复:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 2021-03-30
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    相关资源
    最近更新 更多