web-dev-qa-db-ja.com

Pandas特定の色と凡例の位置を持つ棒グラフ?

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プロットに凡例を含める正しい方法は何ですか? enter image description here

28
Shane

凡例を手動で追加する場合は、バープロットの要素をサブプロットに尋ねる必要があります。

_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()で参照を取得します。

26
Wes McKinney

最も簡潔な方法は次のとおりです。

x.plot(kind="bar").legend(bbox_to_anchor=(1.2, 0.5))

または一般的に

x.plot(kind="bar").legend(*args, **kwargs)
41
Piotr Migdal