グラフの境界線/X 軸と、pyplot の棒グラフの最初と最後の棒の間には大きなスペースがあります (最初の図の赤い矢印)。下の画像では、左側のグラフでは問題がないように見えますが、右側のグラフでは多くのスペースを無駄にしています。グラフが大きくなるほど、スペースも大きくなります。
2 番目の図でどれだけのスペースが無駄になっているかを確認してください:
それを修正する方法はありますか?
コード:
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 はパンダのデータフレーム、nan はプロットしている特徴の null 値の量、size は各値の出現数、labels は対応するラベルの値です。
------------------------
plt.margins(x=0, tiny=True) を使用できます。
デフォルトのマージンは 0.05 で、最初と最後の X 値の間の距離の 5% がマージンとして使用されることを意味します。 plt.margins(x=0-01, tiny=True) などの小さな値を選択すると、少しマージンが残るため、バーが軸にくっついているように見えません。
状況によっては、より広いマージンが必要な場合があります。たとえば、非常に細いバーを 2 本だけ描画する場合です。したがって、プロットの見栄えを良くするための正確な値は、個人の好みだけでなく、複数の要因によって決まります。
plt.margins は、プロットに要素を追加する最後の関数の後に呼び出すのが最適であることに注意してください。
plt.xlim にも描画制限を変更する同様の機能があることにも注意してください。以下は、xlim が同じ di を持つように設定する例です。バー自体の間と同様に、軸とバーの間でもスタンスを保ちます。
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()
1
これはうまく動作します。2 番目の plt.subplot の後に配置する必要があります。tight はデフォルトで True です。私は 0.1 を Figure の幅で割った値に落ち着きました。ご協力ありがとうございます。
– フランワ メンテック
2020 年 9 月 3 日 8:43