如何在show()之后设置matplotlib图的tight_layout

我的设置:

Debian Linux 8.3 amd64,XMonad WM,python2.7,matplotlib 1.5.1

问题:

我正在做一个情节,例如:

import matplotlib.pyplot as plt x = xrange(10) y1 = [i ** 2 for i in x] y2 = [1.0 / (i + 1) for i in x] fig = plt.figure() ax1 = plt.subplot(1, 2, 1) ax1.plot(x, y1) ax2 = plt.subplot(1, 2, 2) ax2.plot(x, y2) plt.show() 

因为我正在使用平铺窗口pipe理器,matplotlib的窗口被拉伸到一个平铺。 不幸的是,这使得graphics小,布局有些松散。

如果我想“收紧”一点点,点击“configuration子图 – >紧密布局”即可完成这项工作。 但是这意味着我必须每次点击图标然后点击button ,因为我使用这个图来显示testing数据并且经常运行,所以很烦人。 所以我尝试了一些事情来使这更容易:

我试过了什么:

  • show()之前调用plt.tight_layout() show()

     ... ax2.plot(x, y2) plt.tight_layout() plt.show() 
  • 添加按键处理程序(所以我只是按“t”):

     ... ax2.plot(x, y2) def kbd_handler(event): if event.key == 't': plt.tight_layout() plt.gcf().canvas.mpl_connect('key_press_event', kbd_handler) plt.show() 
  • 在图上调用tight_layout

     ax2.plot(x, y2) fig.tight_layout() plt.show() 

这一切都没有改变,或者至less对于一排的两个小区来说看起来是一样的,但是对于不止一排,这使得布局更加松散,所有的小区都非常小。

我怀疑:

我相信这个问题与创build窗口后可能发生的resize有关,所以tighten_layout与原始窗口尺寸一起工作。 当窗口pipe理器调整窗口大小时,布局会保留子图大小,而且我有一个带有小图的“松散”布局。

这个问题

有没有办法automaticaly(或非常容易 – 就像使用key_press_event) 拧紧布局,即使调用plt.show()后立即调整窗口?