J'ai un pandas DataFrame
et je veux tracer un graphique à barres qui inclut une légende.
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})})
Si j'appelle intrigue directement, cela place la légende au-dessus de l'intrigue:
x.plot(kind="bar")
Si je désactive la légende dans l'intrigue et que j'essaye de l'ajouter plus tard, elle ne conserve pas les couleurs associées aux deux colonnes du DataFrame (voir ci-dessous):
x.plot(kind="bar", legend=False)
l = pl.legend(('Alpha','Beta'), loc='best')
Quelle est la bonne façon d'inclure une légende dans un tracé matplotlib à partir d'un Pandas DataFrame?
Si vous souhaitez ajouter la légende manuellement, vous devez demander au sous-tracé les éléments du diagramme à barres:
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>
De plus, plt.legend(loc='best')
ou ax.legend(loc='best')
devrait "simplement fonctionner", car il existe déjà des "liens" vers les patchs de tracé de barres configurés lors de la création du tracé, vous n'avez donc pas à passer une liste d'étiquettes d'axe.
Je ne sais pas si la version de pandas que vous utilisez renvoie une poignée à la sous-intrigue (ax = ...
) Mais je suis assez certain que 0.7.3 le fait. Vous peut toujours obtenir une référence avec plt.gca()
.
La façon la plus succincte de procéder est:
x.plot(kind="bar").legend(bbox_to_anchor=(1.2, 0.5))
ou en général
x.plot(kind="bar").legend(*args, **kwargs)