Data Visualization

Matplotlib凡例マスター

Spread the love

Matplotlibは可視化を作成するための強力なPythonライブラリですが、デフォルトの凡例配置はプロットを煩雑にすることがあります。この記事では、可読性を向上させるためにプロット領域の外側に凡例を配置する効果的な方法を示します。

目次

bbox_to_anchorを使用した凡例配置

legend()関数のbbox_to_anchor引数は、凡例の配置を正確に指定できます。図の座標系における凡例の左下隅を指定する(x, y)タプルを取ります。(0,0)は左下、(1,1)は右上です。loc引数は、その基準点内での配置をさらに調整します。


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

fig, ax = plt.subplots()
ax.plot(x, y1, label='sin(x)')
ax.plot(x, y2, label='cos(x)')

ax.legend(bbox_to_anchor=(1.1, 1), loc='upper left') # 必要に応じて(1.1,1)を調整

ax.set_title('正弦波と余弦波')
ax.set_xlabel('x')
ax.set_ylabel('y')

plt.tight_layout()
plt.show()

ここでは、bbox_to_anchor=(1.1, 1)により、凡例がプロットの右(x=1.1)で上部(y=1)に配置されます。loc='upper left'はその基準点内で凡例を左上に配置します。最適な配置を得るために、さまざまなloc値(例:’upper right’、’lower left’、’center’)を試したり、(x,y)座標を調整してください。

bbox_extra_artistsbbox_inchesを使用した凡例の切り抜き防止

bbox_to_anchorを使用しても、大きな凡例や狭い図では凡例が切り取られることがあります。bbox_extra_artistsbbox_inchesはこの問題を解決します。bbox_extra_artistsは保存のための境界ボックス計算に凡例を含め、bbox_inches='tight'は余白を狭くし、切り抜きを防ぎます。


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 500)  # より多くのデータで大きな凡例を作成
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)

fig, ax = plt.subplots()
ax.plot(x, y1, label='sin(x)')
ax.plot(x, y2, label='cos(x)')
ax.plot(x, y3, label='tan(x)')

leg = ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left')

fig.savefig('legend_outside.png', bbox_extra_artists=[leg], bbox_inches='tight')

plt.show()

凡例はlegに格納され、savefigbbox_extra_artistsに渡されます。bbox_inches='tight'により、凡例を含む図全体が保存されます。'legend_outside.png'を目的のファイル名に置き換えてください。

これらの手法により、Matplotlibで柔軟かつ効果的な凡例配置が可能になり、プロットの明瞭性と視覚的な魅力が向上します。最適なレイアウトを得るために、さまざまなパラメータを試してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です