matplotlib 中的 "dynamic" 填充问题
Issue with "dynamic" padding in matplotlib
我一直在尝试在我的 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)
手动调整 window 大小时效果很好(我们在每一边都有 100px 的填充)。
不幸的是,当单击 最大化 时,填充(0 到 1)似乎 等于它的先前值 ,即使打印 returns 正确的 window 尺寸 (1920px)。
第二次单击 Restore Down 会将填充设置为我们最大化时应有的值。
我真的不明白这里发生了什么,我一定是错过了什么......
如果您需要更多信息,例如更多代码,请告诉我。
感谢您的帮助:)
我过去遇到过类似的问题(图形在启动时未调整大小)并将图形子图的重新计算移至 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)
我一直在尝试在我的 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)
手动调整 window 大小时效果很好(我们在每一边都有 100px 的填充)。
不幸的是,当单击 最大化 时,填充(0 到 1)似乎 等于它的先前值 ,即使打印 returns 正确的 window 尺寸 (1920px)。 第二次单击 Restore Down 会将填充设置为我们最大化时应有的值。
我真的不明白这里发生了什么,我一定是错过了什么...... 如果您需要更多信息,例如更多代码,请告诉我。
感谢您的帮助:)
我过去遇到过类似的问题(图形在启动时未调整大小)并将图形子图的重新计算移至 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)