我想让matplotlib中的tight_layout()
函数忽略注释。例如,这是一张tight_layout
:
fig = plt.figure()
fig.patch.set_facecolor('grey')
ax1 = plt.subplot(221)
ax2 = plt.subplot(223)
ax3 = plt.subplot(122)
def example_plot(ax, fontsize=12):
ax.plot([1, 2])
ax.locator_params(nbins=3)
ax.set_xlabel('x-label', fontsize=fontsize)
ax.set_ylabel('y-label', fontsize=fontsize)
ax.set_title('Title', fontsize=fontsize)
example_plot(ax1)
example_plot(ax2)
example_plot(ax3)
plt.tight_layout()
plt.annotate('a)', xy=(0, 1), xycoords='figure fraction', ha='left', va='top')
plt.annotate('b)', xy=(0, 0.5), xycoords='figure fraction', ha='left', va='top')
plt.annotate('c)', xy=(0.5, 1), xycoords='figure fraction', ha='left', va='top')
这个数字似乎在尺寸上增加(向左和向上),以便为注释腾出空间(ylabels不会一直走到边缘)。但是,我希望在没有任何重新排列的情况下将注释添加到图的顶部。我可以以某种方式让tight_layout
忽略这些注释吗?
编辑:事实证明tight_layout
实际上不是问题。即使没有调用tight_layout
,也会调整剧情的大小:
但是,如果我在另一台计算机上尝试相同的操作,则会发生预期的行为(不调整大小)。两个系统都运行matplotlib 2.0.0和ipython。
答案 0 :(得分:1)
我认为你是从错误的方向看这个。首先,没有“问题”。一切都按预期工作。
tight_layout
不会更改数字大小。它所做的就是重新排列图中的元素,以更好地利用可用空间。
由于设置bbox_inches="tight"
,您看到的是已保存的数字裁剪的效果。发生这种情况是因为%matplotlib inline
后端显示了该图的已保存版本。从原始图形中剪切图像,使得保存的图像包含画布中的所有元素
因此,所示图像通常小于原始图像。
如果您将一些标签贴在图形边缘附近,则无法裁剪图形,因为这样会切割标签。与没有标签的情况相比,这可能看起来好像数字已经增长。然而,正如所解释的那样,实际上这个数字并没有被裁剪。
如果需要,解决方案当然是将标签放置在远离图形边缘的位置,这样bbox_inches="tight"
算法可以裁剪更多的图形。
答案 1 :(得分:0)
如果使用%matplotlib inline
,显然这是一个特定问题。如果我切换到%matplotlib notebook
,一切都很好。