Python Matplotlibs:避免注释以调整图形大小

Python Matplotlibs:避免注释以调整图形大小,python,matplotlib,Python,Matplotlib,我希望matplotlib ignore annotations中有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])

我希望matplotlib ignore annotations中有
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')

图的大小似乎有所增加(向左和向上),以便为注释留出空间(标签不会一直延伸到边缘)。但是,我希望在图的顶部添加注释,而不进行任何重新排列。我是否可以使
布局紧凑
忽略这些注释


编辑:事实证明,这不是布局紧凑的问题。即使不调用
tight_layout
也会发生此绘图调整:


但是,如果我在不同的计算机上尝试相同的操作,就会出现预期的行为(不调整大小)。这两个系统都运行matplotlib 2.0.0和ipython。

显然,如果使用
%matplotlib inline
,这是一个特定的问题。如果我改为使用
%matplotlib笔记本
,一切都会好起来。

我想你看的方向不对。首先,没有“问题”。一切正常

紧凑布局
不会改变图形大小。它所做的只是重新调整图形中的元素,以便更好地利用可用空间

您看到的是,由于设置了
bbox\u inches=“tight”
,保存的图形被剪裁的效果。之所以会出现这种情况,是因为
%matplotlib inline
后端显示了图形的保存版本。图像是从原始图形中剪切而来的,因此保存的图像包含画布中的所有元素。
因此,显示的图像通常比原始图像小

但是,如果将一些标签放在靠近地物边缘的位置,则无法裁剪地物,因为这会剪切标签。与没有标签的情况相比,这可能会出现图形增长的情况。然而,正如所解释的,在现实中,这个数字并没有被删减


如果需要的话,一个解决方案当然是将标签放置在离图形边缘更远的位置,这样
bbox\u inches=“tight”
算法可以裁剪更多的图形。

不清楚您在问什么。带注释和不带注释的图形完全相同。这实际上很清楚,即使看代码,
tight\u layout
在添加注释之前被调用,因此它甚至不知道它们是否存在。您的评论让我意识到,
tight\u layout
不是问题所在。同样,如果不调整图形的大小。令人困惑的是,在另一台具有相同版本matplotlib的计算机上,我得到了您描述的行为。这澄清了我所有的困惑。