web-dev-qa-db-ja.com

pandas棒グラフの凡例を変更します

pandasで棒グラフを作成するときはいつも悩まされますが、凡例のラベルの名前を変更したいです。たとえば、次のコードの出力を検討してください。

import pandas as pd
from matplotlib.pyplot import *

df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
df.plot(kind='bar')

enter image description here ここで、凡例の名前を変更する場合、通常は次のことを試みます。

legend(['AAA', 'BBB'])

しかし、私はこれで終わります:

enter image description here

実際、最初の破線は追加のパッチに対応しているようです。

そこで、ラベルを変更する簡単なトリックがあるのか​​、それともmatplotlibで各列を個別にプロットし、ラベルを自分で設定する必要があるのでしょうか。ありがとう。

32
Benares

Pandas df.plot()のラベルの変更:

import pandas as pd
from matplotlib.pyplot import *

fig, ax = subplots()
df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
df.plot(kind='bar', ax=ax)
ax.legend(["AAA", "BBB"]);

enter image description here

編集:

1行少ない:

df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
ax = df.plot(kind='bar')
ax.legend(["AAA", "BBB"]);

enter image description here

48

プロットを複数回呼び出す必要がある場合は、「ラベル」引数も使用できます。

ax = df1.plot(label='df1')
ax = df2.plot(label='df2')

これはOPの質問には当てはまりませんが、DataFrameが長い形式であり、プロットの前にgroupbyを使用する場合に役立ちます。

2
Jonathan

これはわずかにエッジの場合ですが、他の回答に何らかの価値を追加できると思います。

グラフにさらに詳細(注釈や線など)を追加すると、軸の凡例を呼び出すときに関連性があることがすぐにわかります。スクリプトの下部で呼び出すと、異なるハンドルをキャプチャします。伝説の要素、すべてを台無しにします。

たとえば、次のスクリプト:

df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
ax = df.plot(kind='bar')
ax.hlines(23, -.5,.5, linestyles='dashed')
ax.annotate('average',(-0.4,23.5))

ax.legend(["AAA", "BBB"]); #quickfix: move this at the third line

間違っているこの数字が表示されます: enter image description here

これはおもちゃの例ですが、コマンドの順序を変更することで簡単に修正できますが、several操作の後に凡例を変更する必要がある場合があります。次の方法により、柔軟性が高まります。ここで、たとえば、凡例のフォントサイズと位置も変更しました。

df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
ax = df.plot(kind='bar')
ax.hlines(23, -.5,.5, linestyles='dashed')
ax.annotate('average',(-0.4,23.5))
ax.legend(["AAA", "BBB"]);

# do potentially more stuff here

h,l = ax.get_legend_handles_labels()
ax.legend(h[:2],["AAA", "BBB"], loc=3, fontsize=12)

これはあなたが得るものです:

enter image description here

0
gibbone