web-dev-qa-db-fra.com

Pandas graphique à barres avec des couleurs spécifiques et l'emplacement de la légende?

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? enter image description here

28
Shane

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().

26
Wes McKinney

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)
41
Piotr Migdal