30

我有一只熊猫DataFrame,我想绘制一个包含图例的条形图。

import pylab as pl
from pandas import *

x = DataFrame({"Alpha": Series({1: 1, 2: 3, 3:2.5}), "Beta": Series({1: 2, 2: 2, 3:3.5})})

如果我直接调用 plot ,那么它会将图例放在图上方:

x.plot(kind="bar")

如果我打开图中的图例并稍后尝试添加它,那么它不会保留与 DataFrame 中的两列关联的颜色(见下文):

x.plot(kind="bar", legend=False)
l = pl.legend(('Alpha','Beta'), loc='best')

在 Pandas DataFrame 的 matplotlib 图中包含图例的正确方法是什么? 在此处输入图像描述

4

2 回答 2

61

最简洁的方法是:

x.plot(kind="bar").legend(bbox_to_anchor=(1.2, 0.5))

或一般来说

x.plot(kind="bar").legend(*args, **kwargs)
于 2015-03-07T16:25:55.740 回答
31

如果要手动添加图例,则必须向子图询问条形图的元素:

In [17]: ax = x.plot(kind='bar', legend=False)

In [18]: patches, labels = ax.get_legend_handles_labels()

In [19]: ax.legend(patches, labels, loc='best')
Out[19]: <matplotlib.legend.Legend at 0x10b292ad0>

此外,plt.legend(loc='best')或者ax.legend(loc='best')应该“正常工作”,因为在制作绘图时已经设置了条形图补丁的“链接”,因此您不必传递轴标签列表。

我不确定您使用的 pandas 版本是否返回子图(ax = ...)的句柄,但我相当肯定 0.7.3 确实如此。您始终可以使用plt.gca().

于 2012-07-08T16:16:39.380 回答