修改pandas条形图的图例

时间:2015-10-15 13:07:45

标签: python pandas matplotlib plot

当我用熊猫制作条形图时我总是很烦,我想更改图例中标签的名称。例如,考虑此代码的输出:

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独立绘制每个列并自己设置标签。感谢。

3 个答案:

答案 0 :(得分:41)

更改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

修改

少一行:

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

enter image description here

答案 1 :(得分:0)

如果需要调用绘图乘法时间,则还可以使用“标签”参数:

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

OP问题中不是这种情况,但是如果DataFrame为长格式并且您在绘制之前使用groupby,这可能会有所帮助。

答案 2 :(得分:0)

这只是一个边缘情况,但我认为它可以为其他答案增加一些价值。

如果在图形上添加更多详细信息(例如注释或线条),您很快就会发现在轴上调用图例时它是相关的:如果在脚本底部调用它,它将捕获不同的内容图例元素的句柄,弄乱了一切。

例如以下脚本:

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

尽管这是一个玩具示例,可以通过更改命令的顺序轻松地进行修复,但有时您需要在几次操作后修改图例,因此下一个方法将为您提供更大的灵活性。例如,在这里,我还更改了图例的字体大小和位置:

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