26

2 行 1 列の 2 つのサブプロットを持つ図があります。見栄えの良い図の凡例を追加できます

fig.legend((l1, l2), ['2011', '2012'], loc="lower center", 
           ncol=2, fancybox=True, shadow=True, prop={'size':'small'})

ただし、この凡例は図の中心に配置されており、の中心の下ではありません。これで、軸座標を取得できます

axbox = ax[1].get_position()

理論的には、タプルでlocキーワードを指定することで、凡例を配置できるはずです。

fig.legend(..., loc=(axbox.x0+0.5*axbox.width, axbox.y0-0.08), ...)

locが凡例ボックスの中央ではなく左端/隅を指定するように、凡例が左揃えであることを除いて、これは機能します。alignhorizo ​​ntalalignment などのキーワードを検索しましたが、見つかりませんでした。「凡例の位置」も取得しようとしましたが、凡例には *get_position()* メソッドがありません。*bbox_to_anchor* について読みましたが、図の凡例に適用すると意味がわかりません。これは、軸の凡例用に作成されたようです。

または:代わりにシフトされた軸の凡例を使用する必要がありますか? では、そもそもなぜフィギュア伝説があるのでしょうか?そして、 loc="lower center"もそうするので、どういうわけか、図の凡例を「中央揃え」にすることが可能でなければなりません。

助けてくれてありがとう、

マーティン

4

2 に答える 2

34

この場合、Figurelegendメソッドに軸を使用できます。いずれにせよ、bbox_to_anchorそれが鍵です。すでに気づいたbbox_to_anchorように、凡例を配置する座標 (またはボックス) のタプルを指定します。使用しているときbbox_to_anchorは、locationkwarg を水平方向と垂直方向の配置を制御するものと考えてください。

違いは、座標のタプルが軸または図の座標として解釈されるかどうかだけです。

図の凡例を使用する例として:

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)

x = np.linspace(0, np.pi, 100)

line1, = ax1.plot(x, np.cos(3*x), color='red')
line2, = ax2.plot(x, np.sin(4*x), color='green')

# The key to the position is bbox_to_anchor: Place it at x=0.5, y=0.5
# in figure coordinates.
# "center" is basically saying center horizontal alignment and 
# center vertical alignment in this case
fig.legend([line1, line2], ['yep', 'nope'], bbox_to_anchor=[0.5, 0.5], 
           loc='center', ncol=2)

plt.show()

ここに画像の説明を入力

軸メソッドの使用例として、次のようにしてみてください。

import numpy as np
import matplotlib.pyplot as plt

fig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)

x = np.linspace(0, np.pi, 100)

line1, = ax1.plot(x, np.cos(3*x), color='red')
line2, = ax2.plot(x, np.sin(4*x), color='green')

# The key to the position is bbox_to_anchor: Place it at x=0.5, y=0
# in axes coordinates.
# "upper center" is basically saying center horizontal alignment and 
# top vertical alignment in this case
ax1.legend([line1, line2], ['yep', 'nope'], bbox_to_anchor=[0.5, 0], 
           loc='upper center', ncol=2, borderaxespad=0.25)

plt.show()

ここに画像の説明を入力

于 2012-12-19T23:06:46.893 に答える