matplotlib 如何减少轴和第一个和最后一个酒吧之间的空间

uoifb46i  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(104)

在pyplot中,图表的边框/x轴与条形图中的第一个和最后一个条形之间有很大的空间(第一张图中的红色箭头)。在下图中,它在左边的图表中看起来很好,但在右边的图表中浪费了很多空间。图表越大,空间越大。

看看第二张图中浪费了多少空间:

有办法解决吗?
代码:

plt.figure(figsize=figsize)
grid = plt.GridSpec(figsize[1], figsize[0], wspace=120/figsize[0])
plt.suptitle(feature.upper())

# NaN plot
plt.subplot(grid[:, :2])
plt.title('Présence')
plt.ylabel('occurences')
plt.bar([0, 1], [df.shape[0] - nan, nan], color=['#4caf50', '#f44336'])
plt.xticks([0, 1], ['Renseigné', 'Absent'], rotation='vertical')

# Distrib plot
plt.subplot(grid[:, 2:])
plt.title('Distribution')
x_pos = [i for i, _ in enumerate(sizes)]
plt.bar(x_pos, sizes)
plt.xticks(x_pos, labels, rotation='vertical')
plt.show()

df是我的pandas DataFrame,nan是我正在绘制的特性的空值数量,sizes是每个值出现的次数,labels是相应的标签值。

mbjcgjjk

mbjcgjjk1#

可以使用plt.margins(x=0, tight=True)
默认边距是0.05,这意味着第一个和最后一个x值之间的距离的5%被用作边距。选择一个小的值,如plt.margins(x=0-01, tight=True),会留下一点边距,所以条看起来不会粘在轴上。
在某些情况下,需要更宽的边距。例如,当只绘制两个非常窄的条时。因此,一个图看起来不错的确切值取决于多种因素以及个人喜好。
请注意,plt.margins最好在最后一个向图中添加元素的函数之后调用。
还要注意plt.xlim也有类似的改变绘图限制的功能。这里有一个例子,它设置xlim的轴和条之间的距离与条之间的距离相同。

import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=3, figsize=(12, 3))
for ax in axes:
    width = 0.4
    ax.bar([0, 1, 2], [2, 3, 5], width=width, color='turquoise')
    if ax == axes[0]:
        ax.margins(x=0.01)
        ax.set_title('1% margins')
    elif ax == axes[1]:
        ax.margins(x=0.1)
        ax.set_title('10% margins')
    else:
        ax.set_xlim(-1+width/2, 3-width/2)
        ax.set_title('setting xlim')
plt.show()

相关问题