图例比轴宽的紧凑布局
Tight Layout With Legend Wider than Axes
我正在使用 GUI 绘制绘图,该 GUI 在轴上方放置了一个长图例句柄。图例比坐标轴宽,所以我尝试使用 fig.tight_layout().
扩展坐标轴以匹配图例购买的宽度
但是,我发现当调用 tight_layout() 时,这会减小轴的宽度,而不是像预期的那样填充图例下方的 space。
这是我在调用 tight_layout() 之前的数字。
并在调用 tight_layout() 之后。
令人惊讶的是,我发现在每次 tight_layout() 调用后轴的宽度都会减小。当图例比轴宽时调用 tight_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()
The axes 试图使自己足够小,以至于 none 它的艺术家与任何其他轴或图形的边缘重叠。在这种情况下,它无法使自己足够小以不溢出图的边缘,但它一直在尝试。
为什么要打电话给tight_layout?您可以从 tight_layout leg=legend()
、leg.set_in_layout(False)
中取出图例,然后调用 tight_layout
获得正确的宽度,然后使用 subplots_adjust
使足够房间在顶部。但是你也可以让标签的长度更合理。
感谢 Jody 的回复,我意识到图例尺寸比数字大。这就是造成 Jody 描述的收缩轴的原因。
解决方法是在这种情况下调整图形大小,然后使用紧凑布局。这将修复收缩轴行为。
我正在使用 GUI 绘制绘图,该 GUI 在轴上方放置了一个长图例句柄。图例比坐标轴宽,所以我尝试使用 fig.tight_layout().
扩展坐标轴以匹配图例购买的宽度但是,我发现当调用 tight_layout() 时,这会减小轴的宽度,而不是像预期的那样填充图例下方的 space。
这是我在调用 tight_layout() 之前的数字。
并在调用 tight_layout() 之后。
令人惊讶的是,我发现在每次 tight_layout() 调用后轴的宽度都会减小。当图例比轴宽时调用 tight_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()
The axes 试图使自己足够小,以至于 none 它的艺术家与任何其他轴或图形的边缘重叠。在这种情况下,它无法使自己足够小以不溢出图的边缘,但它一直在尝试。
为什么要打电话给tight_layout?您可以从 tight_layout leg=legend()
、leg.set_in_layout(False)
中取出图例,然后调用 tight_layout
获得正确的宽度,然后使用 subplots_adjust
使足够房间在顶部。但是你也可以让标签的长度更合理。
感谢 Jody 的回复,我意识到图例尺寸比数字大。这就是造成 Jody 描述的收缩轴的原因。
解决方法是在这种情况下调整图形大小,然后使用紧凑布局。这将修复收缩轴行为。