图例比轴宽的紧凑布局

问题描述

我正在使用GUI进行绘图,该GUI的轴上方有一个长的图例手柄。图例比轴宽,因此我尝试使用fig.tight_layout()来扩展轴以匹配图例购买的宽度。

但是,我发现当调用ight_layout()时,这会减小轴的宽度,而不是像预期的那样填充图例下的空间。

这是我打电话给ight_layout()之前的身影。

figure without tight layout

并在调用ight_layout()之后。

figure with tight layout

令人惊讶的是,我发现每次调用tight_layout()之后,轴的宽度都会减小。当图例比轴宽时,调用ight_layout()是否有问题?当图例宽度小于数字时,不会发生这种情况。

这是用于复制人物和行为的代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# make dataframe with random data
np.random.seed(seed=7)
data1 = np.random.normal(size=100)
name1 = 'handle_with_a_really_really_really_really_long_name'
d = {name1: data1}
df = pd.DataFrame(data=d)

# plotting stuff
fig = plt.figure(figsize=(4,4))
ax = fig.add_subplot(111)
df.plot(ax=ax,kind='hist')
ax.legend(loc='lower left',bBox_to_anchor=(-0.04,1.05))

# tight layout calls to reduce axis width
#fig.tight_layout()
#fig.tight_layout()
#fig.tight_layout()

解决方法

轴试图使其自身足够小,以使其美术师没有与任何其他轴或图形边缘重叠。在这种情况下,无法采取任何措施使其自身变小到不会溢出图形的边缘,但是它一直在尝试。

您为什么要打电话给紧密布局?您可以从tight_layout leg=legend()leg.set_in_layout(False)中删除图例,然后调用tight_layout以获取正确的宽度,然后使用subplots_adjust在顶部留出足够的空间。但是您也可以使标签的长度更合理。

,

多亏了乔迪的回应,我才意识到图例的尺寸要比数字大。这就是造成Jody所述的收缩轴的原因。

在这种情况下,解决方案是调整图形的大小,然后使用紧凑的布局。这样可以解决收缩轴的行为。