凡例をプロットの外側に配置する方法 質問する

凡例をプロットの外側に配置する方法 質問する

1 つの図に 20 個のプロット (サブプロットではない) のシリーズを作成する必要があります。凡例はボックスの外側に表示します。同時に、図のサイズが小さくなるため、軸を変更したくありません。

  1. 凡例ボックスをプロット領域の外側に残したい (凡例をプロット領域の右側の外側に表示したい)。
  2. 凡例ボックス内のテキストのフォント サイズを小さくして、凡例ボックスのサイズを小さくする方法はありますか?

ベストアンサー1

やりたいことを実現するには、いくつかの方法があります。クリスチャン・アリスそしてナビはすでに言ったbbox_to_anchorキーワード引数を使用して、凡例を部分的に軸の外側に配置したり、フォント サイズを小さくしたりすることができます。

フォント サイズを小さくすることを検討する前に (非常に読みにくくなる可能性があります)、凡例をさまざまな場所に配置して試してみてください。

それでは、一般的な例から始めましょう。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend()

plt.show()

代替テキスト

同じことを行いますが、bbox_to_anchorキーワード引数を使用すると、凡例を軸の境界の外側に少し移動できます。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$' % i)

ax.legend(bbox_to_anchor=(1.1, 1.05))

plt.show()

代替テキスト

同様に、凡例をより水平にしたり、図の上部に配置したりします (角丸とシンプルなドロップ シャドウもオンにします)。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    line, = ax.plot(x, i * x, label='$y = %ix$'%i)

ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.05),
          ncol=3, fancybox=True, shadow=True)
plt.show()

代替テキスト

あるいは、現在のプロットの幅を縮小し、凡例をグラフの軸の外側に完全に配置します(注:tight_layout()を省略しますax.set_position():

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    ax.plot(x, i * x, label='$y = %ix$'%i)

# Shrink current axis by 20%
box = ax.get_position()
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height])

# Put a legend to the right of the current axis
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

plt.show()

代替テキスト

同様の方法で、プロットを垂直方向に縮小し、下部に水平の凡例を配置します。

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)

fig = plt.figure()
ax = plt.subplot(111)

for i in xrange(5):
    line, = ax.plot(x, i * x, label='$y = %ix$'%i)

# Shrink current axis's height by 10% on the bottom
box = ax.get_position()
ax.set_position([box.x0, box.y0 + box.height * 0.1,
                 box.width, box.height * 0.9])

# Put a legend below current axis
ax.legend(loc='upper center', bbox_to_anchor=(0.5, -0.05),
          fancybox=True, shadow=True, ncol=5)

plt.show()

代替テキスト

見てみましょうmatplotlib 凡例ガイド. こちらもご覧くださいplt.figlegend()

おすすめ記事