熊猫酒吧情节具有特定的颜色和传奇位置?

Sha*_*ane 28 python legend pandas

我有一只熊猫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})})
Run Code Online (Sandbox Code Playgroud)

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

x.plot(kind="bar")
Run Code Online (Sandbox Code Playgroud)

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

x.plot(kind="bar", legend=False)
l = pl.legend(('Alpha','Beta'), loc='best')
Run Code Online (Sandbox Code Playgroud)

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

Pio*_*dal 43

最简洁的方法是:

x.plot(kind="bar").legend(bbox_to_anchor=(1.2, 0.5))
Run Code Online (Sandbox Code Playgroud)

或者一般而言

x.plot(kind="bar").legend(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案。 (3认同)

Wes*_*ney 26

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

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>
Run Code Online (Sandbox Code Playgroud)

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

我不确定你正在使用的pandas版本是否返回了子图(ax = ...)的句柄,但我相当确定0.7.3会这样做.你可以随时获得它的引用plt.gca().

  • 这很有效,谢谢!能够在调用x.plot()时直接指定图例位置会很不错. (3认同)