如何去掉Pandas plot()的多余图例条目?
我有一个Pandas的数据框:
>>> drawdata
sales mg
ID RPT_Date
600809 20120331 22.1401 13.5591
20120630 38.1565 22.8968
20120930 52.5098 31.5909
下面的命令会生成一个柱状图,如下图所示:
>>> drawdata.unstack('ID').plot(kind='bar', use_index=True)
<matplotlib.axes.AxesSubplot object at 0x035A9D70>
我的问题在注释中显示:怎么去掉多余的图例条目?
(这个链接相关: 如何根据子索引绘制Pandas数据框的柱状图? )
编辑:(关于HYRY方法的更多信息)
# -*- coding: utf-8 -*-
import itertools
import pandas as pd
import io
text = '''\
ID RPT_Date sales mg
000568 20120331 22.140 13.559
000568 20120630 38.156 22.896
000568 20120930 52.509 31.590
'''
drawdata = pd.read_csv(io.BytesIO(text), delimiter = ' ', converters = {0:str})
drawdata.set_index(['ID','RPT_Date'], inplace = True)
ax = drawdata.unstack('ID').plot(kind='bar', use_index=True, legend=False)
display_acct_list = list(drawdata.columns)
legend_list = list(itertools.product(display_acct_list, list(set(drawdata.index.get_level_values('ID')))))
legend_list = [x[0] + '-' + x[1] for x in legend_list]
ax.legend(legend_list, loc='best', fancybox=True, shadow=True)
ax.set_xlabel("")
这个图表的图例中缺少“颜色框”。
1 个回答
3
你可以通过以下方式关闭图例标题:
drawdata.unstack('ID').plot().get_legend().set_title("")
或者你也可以自己画图例:
import pylab as pl
drawdata.unstack('ID').plot(legend=False)
pl.legend(loc="best")
关于你的第二个问题:
这是因为图中有一条虚线,如果你稍微缩小一下视图,就能看到它。当你设置图例标签时,第一个标签会被分配给这条虚线。你可以通过以下代码来解决这个问题:
ax.legend(ax.containers, legend_list, loc='best', fancybox=True, shadow=True)