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_artists
とbbox_inches
を使用した凡例の切り抜き防止
bbox_to_anchor
を使用しても、大きな凡例や狭い図では凡例が切り取られることがあります。bbox_extra_artists
とbbox_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
に格納され、savefig
のbbox_extra_artists
に渡されます。bbox_inches='tight'
により、凡例を含む図全体が保存されます。'legend_outside.png'
を目的のファイル名に置き換えてください。
これらの手法により、Matplotlibで柔軟かつ効果的な凡例配置が可能になり、プロットの明瞭性と視覚的な魅力が向上します。最適なレイアウトを得るために、さまざまなパラメータを試してみてください。