pandasで棒グラフを作成するときはいつも悩まされますが、凡例のラベルの名前を変更したいです。たとえば、次のコードの出力を検討してください。
import pandas as pd
from matplotlib.pyplot import *
df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
df.plot(kind='bar')
ここで、凡例の名前を変更する場合、通常は次のことを試みます。
legend(['AAA', 'BBB'])
しかし、私はこれで終わります:
実際、最初の破線は追加のパッチに対応しているようです。
そこで、ラベルを変更する簡単なトリックがあるのか、それともmatplotlibで各列を個別にプロットし、ラベルを自分で設定する必要があるのでしょうか。ありがとう。
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"]);
編集:
1行少ない:
df = pd.DataFrame({'A':26, 'B':20}, index=['N'])
ax = df.plot(kind='bar')
ax.legend(["AAA", "BBB"]);
プロットを複数回呼び出す必要がある場合は、「ラベル」引数も使用できます。
ax = df1.plot(label='df1')
ax = df2.plot(label='df2')
これはOPの質問には当てはまりませんが、DataFrame
が長い形式であり、プロットの前にgroupby
を使用する場合に役立ちます。
これはわずかにエッジの場合ですが、他の回答に何らかの価値を追加できると思います。
グラフにさらに詳細(注釈や線など)を追加すると、軸の凡例を呼び出すときに関連性があることがすぐにわかります。スクリプトの下部で呼び出すと、異なるハンドルをキャプチャします。伝説の要素、すべてを台無しにします。
たとえば、次のスクリプト:
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
これはおもちゃの例ですが、コマンドの順序を変更することで簡単に修正できますが、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)
これはあなたが得るものです: