Matplotlib 更改标签大小时保持子批次的区域不变

Matplotlib 更改标签大小时保持子批次的区域不变,matplotlib,Matplotlib,在matplotlib中,如果我增加标签的大小,子批次的大小将保持不变,但整个图形将自行展开 例如: 导入matplotlib.pyplot作为plt 图(ax1,ax2)=plt.子批次(2,1) ax2.设置标签(['a long and big label',fontsize=26) 我想知道如何设置子地块,以自动调整其大小以适应标签,从而使子地块占用的整个区域保持不变,如下所示: 首先要注意,默认情况下,子地块的总面积保持不变。问题中的代码将导致 标签被简单地切割的地方。当代码在带

matplotlib
中,如果我增加标签的大小,子批次的大小将保持不变,但整个图形将自行展开

例如:

导入matplotlib.pyplot作为plt
图(ax1,ax2)=plt.子批次(2,1)
ax2.设置标签(['a long and big label',fontsize=26)

我想知道如何设置子地块,以自动调整其大小以适应标签,从而使子地块占用的整个区域保持不变,如下所示:


首先要注意,默认情况下,子地块的总面积保持不变。问题中的代码将导致

标签被简单地切割的地方。当代码在带有内联后端的jupyter notebook中运行时,生成的png图像将被扩展以包含所有内容,甚至最初在图形之外的部分

您可以通过
constrated\u layout
tight\u layout()
自动调整所有子批次,使其与图形完美匹配。例如

fig, (ax1, ax2) = plt.subplots(2, 1, constrained_layout=True)
# ...

然而,并没有一种自动的方法可以只调整其中一个子批次,而独立于其他子批次。在这种情况下,需要手动计算所需的空间

import matplotlib.pyplot as plt

fig = plt.figure()
gs = fig.add_gridspec(2,2)

ax1 = fig.add_subplot(gs[0,:])
ax2 = fig.add_subplot(gs[1,1])
ax2.set_yticklabels(['a long and big label'], fontsize=26)

fig.canvas.draw()
bb = ax2.yaxis.get_tightbbox(fig.canvas.get_renderer())
labelwidth = fig.transFigure.inverted().transform([bb.width, 0])[0]
axwidth = ax1.get_position().width

gs.set_width_ratios([labelwidth, axwidth-labelwidth] )
ax2.set_position(gs[1,1].get_position(fig))

plt.show()

Thx,像往常一样非常有用。如果我为ax1和ax2设置了不同字体大小的标签,请添加一个示例?这是对齐标签的方法吗?
import matplotlib.pyplot as plt

fig = plt.figure()
gs = fig.add_gridspec(2,2)

ax1 = fig.add_subplot(gs[0,:])
ax2 = fig.add_subplot(gs[1,1])
ax2.set_yticklabels(['a long and big label'], fontsize=26)

fig.canvas.draw()
bb = ax2.yaxis.get_tightbbox(fig.canvas.get_renderer())
labelwidth = fig.transFigure.inverted().transform([bb.width, 0])[0]
axwidth = ax1.get_position().width

gs.set_width_ratios([labelwidth, axwidth-labelwidth] )
ax2.set_position(gs[1,1].get_position(fig))

plt.show()