1. ホーム
  2. python

[解決済み] matplotlib の凡例の項目の順番はどのように決まるのですか?

2023-04-19 15:16:06

質問

凡例の項目を並べ替えなければならないのですが、その必要はないと思います。私は試しています。

from pylab import *
clf()
ax=gca()
ht=ax.add_patch(Rectangle((1,1),1,1,color='r',label='Top',alpha=.1))
h1=ax.bar(1,2,label='Middle')
hb=ax.add_patch(Rectangle((1,1),1,1,color='k',label='Bottom',alpha=.11))
legend()
show()

となってしまい、結局BottomがMiddleの上に来てしまいます。 どうすれば正しい順序になるのでしょうか?作成順では決まらないのでしょうか?

更新:以下のようにすると、強制的に順番を変更することができます。これが一番シンプルな方法かもしれませんし、厄介な気がします。 問題は、元の順番を決めるのは何かということです。

hh=[ht,h1,hb]
legend([ht,h1.patches[0],hb],[H.get_label() for H in hh])

どのように解決するのですか?

順序は決定論的ですが、プライベートガットの一部なので、いつでも変更することができます。 ここで (この self.* 要素は追加されたアーティストのリストです。したがって、ハンドルリストは、まずタイプによって、次に追加された順序でソートされています)。

凡例の要素の順序を明示的に制御したい場合は、編集で行ったように、ハンドラとラベルのリストを組み立ててください。