pandas DataFrame
があり、凡例を含む棒グラフをプロットしたい。
import pylab as pl
from pandas import *
x = DataFrame({"Alpha": Series({1: 1, 2: 3, 3:2.5}), "Beta": Series({1: 2, 2: 2, 3:3.5})})
プロットを直接呼び出すと、プロットの上に凡例を配置します。
x.plot(kind="bar")
プロットの凡例をオフにして後で追加しようとすると、DataFrameの2つの列に関連付けられた色が保持されません(以下を参照)。
x.plot(kind="bar", legend=False)
l = pl.legend(('Alpha','Beta'), loc='best')
Pandas DataFrameからmatplotlibプロットに凡例を含める正しい方法は何ですか?
凡例を手動で追加する場合は、バープロットの要素をサブプロットに尋ねる必要があります。
_In [17]: ax = x.plot(kind='bar', legend=False)
In [18]: patches, labels = ax.get_legend_handles_labels()
In [19]: ax.legend(patches, labels, loc='best')
Out[19]: <matplotlib.legend.Legend at 0x10b292ad0>
_
また、plt.legend(loc='best')
またはax.legend(loc='best')
は「正常に機能する」はずです。なぜなら、プロットの作成時に設定されたバープロットパッチへの「リンク」が既にあるため、その必要はありません。軸ラベルのリストを渡します。
pandas使用しているバージョンがサブプロット(_ax = ...
_)へのハンドルを返すかどうかはわかりませんが、0.7.3が行うことはかなり確信しています。常にplt.gca()
で参照を取得します。
最も簡潔な方法は次のとおりです。
x.plot(kind="bar").legend(bbox_to_anchor=(1.2, 0.5))
または一般的に
x.plot(kind="bar").legend(*args, **kwargs)