Python 修改条形图的图例

Python 修改条形图的图例,python,pandas,matplotlib,plot,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') 现在,如果我想更改图例中的名称,我通常会尝试: legend(['AAA', 'BBB']) 但我最终得出的结论是: 事实上,第一条虚线似乎对应一个额外的补

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

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

要更改熊猫
df.plot()
的标签,请使用
ax.legend([…])

另一种方法是通过
plt.legend([…])
执行同样的操作:


如果需要调用plot multiply times,也可以使用“label”参数:

ax = df1.plot(label='df1', y='y_var')
ax = df2.plot(label='df2', y='y_var')

虽然OP问题中并非如此,但如果
数据帧的格式较长,并且在绘图之前使用
groupby
,则这可能会有所帮助。

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

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

例如,以下脚本:

df=pd.DataFrame({'A':26,'B':20},索引=['N'])
ax=df.plot(kind='bar')
ax.hlines(23、.5、.5,linestyles='虚线')
ax.注释(‘平均’,(-0.4,23.5))
ax.图例([“AAA”、“BBB”)#快速修复:将此移动到第三行
会给你这个数字,这是错误的:

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

df=pd.DataFrame({'A':26,'B':20},索引=['N'])
ax=df.plot(kind='bar')
ax.hlines(23、.5、.5,linestyles='虚线')
ax.注释(‘平均’,(-0.4,23.5))
ax.图例([“AAA”、“BBB”);
#在这里做更多的事情
h、 l=ax.get\u图例\u句柄\u标签()
ax.图例(h[:2]、“AAA”、“BBB”]、loc=3、fontsize=12)
这是您将得到的:


您使用的每个版本是什么,
python
pandas
matplotlib
。当我运行My.python:2.7 matplotlib:1.3.1 pandas:0.13.1时,我看不到这个问题。你可以尝试
legend(df.columns)
与第二个相同的结果(显然是以“A”和“B”作为标签)好的,我只是测试一下你是否指定
legend()
是原因,因为它对我来说运行得很好,而且似乎是这样。升级matplotlib和pandas会有问题吗?只有当您将列作为y参数时,这才有效。您好!我知道这已经快五年了,但我想知道你是否碰巧知道你在图表中使用的颜色?我真的很喜欢它们,而且看起来跟它们不太相配,谢谢@RichardRobinson这些颜色是“348ABD”、“7A68A6”、“A60628”、“467821”、“CF4457”、“188487”、“E24A33”,正确的使用方法是通过
matplotlibrc
config文件。如果你尝试谷歌,你会发现很多不错的现成配置。
import matplotlib.pyplot as plt
df.plot(kind='bar')
plt.legend(["AAA", "BBB"]);
ax = df1.plot(label='df1', y='y_var')
ax = df2.plot(label='df2', y='y_var')