113 votes

Définir une couleur de barre différente dans matplotlib Python

Supposément, j'ai le graphique à barres ci-dessous :

BarPlot

Des idées sur comment définir des couleurs différentes pour chaque transporteur? Par exemple, AK serait rouge, GA serait vert, etc?

J'utilise Pandas et matplotlib en Python

>>> f=plt.figure()
>>> ax=f.add_subplot(1,1,1)
>>> ax.bar([1,2,3,4], [1,2,3,4])

>>> ax.get_children()
[, ,  , , , , , , , , , ]
>>> ax.get_children()[2].set_color('r') #Vous pouvez également essayer de localiser le premier objet patches.Rectangle au lieu d'appeler directement l'index.

Pour les suggestions ci-dessus, comment pourrions-nous exactement énumérer ax.get_children() et vérifier si le type d'objet est un rectangle? Donc si l'objet est un rectangle, nous attribuerions une couleur aléatoire différente?

186voto

CT Zhu Points 12184

Simple, just use .set_color

>>> barlist=plt.bar([1,2,3,4], [1,2,3,4])
>>> barlist[0].set_color('r')
>>> plt.show()

entrer la description de l'image ici

Pour votre nouvelle question, ce n'est pas beaucoup plus difficile non plus, vous devez simplement trouver la barre de votre axe, un exemple :

>>> f=plt.figure()
>>> ax=f.add_subplot(1,1,1)
>>> ax.bar([1,2,3,4], [1,2,3,4])

>>> ax.get_children()
[, 
 ,  
 , 
 , 
 , 
 , 
 , 
 , 
 , 
 ,
 , 
 ]
>>> ax.get_children()[2].set_color('r') 
 #Vous pouvez également essayer de localiser le premier objet patches.Rectangle 
 #au lieu d'appeler directement l'index.

Si vous avez un graphique complexe et que vous souhaitez d'abord identifier les barres, ajoutez-les :

>>> import matplotlib
>>> childrenLS=ax.get_children()
>>> barlist=filter(lambda x: isinstance(x, matplotlib.patches.Rectangle), childrenLS)
[, 
 , 
 , 
 , 
 ]

50voto

7stud Points 7467

Je suppose que vous utilisez Series.plot() pour tracer vos données. Si vous regardez la documentation pour Series.plot() ici :

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.plot.html

il n'y a pas de paramètre color répertorié où vous pourriez définir les couleurs pour votre graphique en barres.

Cependant, les documents de Series.plot() indiquent ce qui suit à la fin de la liste des paramètres :

kwds : mots-clés
Options à transmettre à la méthode de traçage matplotlib

Ce que cela signifie, c'est que lorsque vous spécifiez l'argument kind pour Series.plot() comme bar, Series.plot() appellera en fait matplotlib.pyplot.bar(), et matplotlib.pyplot.bar() recevra tous les arguments de mots-clés supplémentaires que vous spécifiez à la fin de la liste d'arguments pour Series.plot().

Si vous examinez la documentation de la méthode matplotlib.pyplot.bar() ici :

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

..il accepte également des arguments de mots-clés à la fin de sa liste de paramètres, et si vous parcourez la liste des noms de paramètres reconnus, l'un d'eux est color, qui peut être une séquence spécifiant les différentes couleurs pour votre graphique en barres.

En mettant tout cela ensemble, si vous spécifiez l'argument de mot-clé color à la fin de votre liste d'arguments Series.plot(), l'argument de mot-clé sera relayé à la méthode matplotlib.pyplot.bar(). Voici la preuve :

import pandas as pd
import matplotlib.pyplot as plt

s = pd.Series(
    [5, 4, 4, 1, 12],
    index = ["AK", "AX", "GA", "SQ", "WN"]
)

#Définir les descriptions :
plt.title("Retard total des incidents causés par le transporteur")
plt.ylabel('Incident de retard')
plt.xlabel('Transporteur')

#Définir les couleurs des barres:
ax = plt.gca()
ax.tick_params(axis='x', colors='blue')
ax.tick_params(axis='y', colors='red')

#Tracer les données :
mes_couleurs = 'rgbkymc'  #rouge, vert, bleu, noir, etc.

pd.Series.plot(
    s, 
    kind='bar', 
    color=mes_couleurs,
)

plt.show()

description de l'image ici

Notez que s'il y a plus de barres que de couleurs dans votre séquence, les couleurs se répèteront.

26voto

Yannis P. Points 1581

Mettre à jour pandas 0.17.0

La réponse de @7stud pour la version la plus récente de pandas nécessiterait juste d'appeler

s.plot( 
    kind='bar', 
    color=my_colors,
)

au lieu de

pd.Series.plot(
    s, 
    kind='bar', 
    color=my_colors,
)

Les fonctions de tracé sont devenues des membres des objets Series, DataFrame et en réalité, appeler pd.Series.plot avec un argument color génère une erreur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X