【问题标题】:How to get rid of the extra legend entry of Pandas plot()?如何摆脱 Pandas plot() 的额外图例条目?
【发布时间】:2013-03-16 22:22:47
【问题描述】:

我有一个 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>

我的问题显示为注释:如何摆脱额外的图例条目?

(此网址相关: How to barplot Pandas dataframe columns aligning by sub-index?)

编辑:(有关 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("")

图表缺少图例中的“颜色框”。

【问题讨论】:

    标签: python matplotlib pandas


    【解决方案1】:

    您可以通过以下方式关闭图例标题:

    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)
    

    【讨论】:

    • 感谢您的代码。有用。但是由于我需要自定义图例文本并将轴对象分配给一个变量以供以后处理,所以我使用第二种方法。现在我遇到另一个问题:图例中的第一个“颜色框”不见了!我将整个代码和图表附在更新区域中。请你看一下好吗?
    • 好的,已修复,请再次查看答案。
    • 太棒了!解决我最头疼的问题之一。非常感谢。
    最近更新 更多