Configuración de color de barra diferente en matplotlib Python

Supongo, tengo el gráfico de barras de la siguiente manera:

BarPlot

¿Alguna idea sobre cómo configurar diferentes colores para cada operador? Como por ejemplo, AK sería rojo, GA sería verde, etc.

Estoy usando Pandas y 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') #You can also try to locate the first patches.Rectangle object instead of direct calling the index. 

Para las sugerencias anteriores, ¿cómo podríamos enumerar exactamente ax.get_children () y verificar si el tipo de objeto es un rectángulo? Entonces, si el objeto es un rectángulo, ¿asignaríamos un color aleatorio diferente?

Simple, solo usa .set_color

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

introduzca la descripción de la imagen aquí

Para su nueva pregunta, tampoco es mucho más difícil, solo necesita encontrar la barra desde su eje, un ejemplo:

 >>> 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') #You can also try to locate the first patches.Rectangle object #instead of direct calling the index. 

Si tiene una ttwig compleja y desea identificar primero las barras, agréguelas:

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

Supongo que está utilizando Series.plot () para trazar sus datos. Si miras los documentos para Series.plot () aquí:

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

no hay ningún parámetro de color en la lista donde pueda establecer los colores para su gráfico de barras.

Sin embargo, los documentos Series.plot () indican lo siguiente al final de la lista de parámetros:

 kwds : keywords Options to pass to matplotlib plotting method 

Lo que significa es que cuando especifique el argumento de clase para Series.plot () como barra , Series.plot () llamará a matplotlib.pyplot.bar (), y matplotlib.pyplot.bar () se enviará todo el extra los argumentos de palabras clave que especifique al final de la lista de argumentos para Series.plot ().

Si examina los documentos para el método matplotlib.pyplot.bar () aquí:

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

… también acepta argumentos de palabras clave al final de su lista de parámetros, y si examinas la lista de nombres de parámetros reconocidos, uno de ellos es el color , que puede ser una secuencia que especifica los diferentes colores para tu gráfica de barras.

Poniéndolo todo junto, si especifica el argumento de la palabra clave de color al final de la lista de argumentos de Series.plot (), el argumento de la palabra clave se transmitirá al método matplotlib.pyplot.bar (). Aquí está la prueba:

 import pandas as pd import matplotlib.pyplot as plt s = pd.Series( [5, 4, 4, 1, 12], index = ["AK", "AX", "GA", "SQ", "WN"] ) #Set descriptions: plt.title("Total Delay Incident Caused by Carrier") plt.ylabel('Delay Incident') plt.xlabel('Carrier') #Set tick colors: ax = plt.gca() ax.tick_params(axis='x', colors='blue') ax.tick_params(axis='y', colors='red') #Plot the data: my_colors = 'rgbkymc' #red, green, blue, black, etc. pd.Series.plot( s, kind='bar', color=my_colors, ) plt.show() 

introduzca la descripción de la imagen aquí

Tenga en cuenta que si hay más barras que colores en su secuencia, los colores se repetirán.

Actualizar pandas 0.17.0

La respuesta de @ 7stud para la nueva versión de pandas requeriría solo llamar

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

en lugar de

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

Las funciones de trazado se han convertido en miembros de los objetos Series, DataFrame y, de hecho, llamar a pd.Series.plot con un argumento de color da un error