Saltar al contenido

Cómo dar colores personalizados a un gráfico de barras pandas/matplotlib

Verificamos de forma profundamente cada reseña en nuestra página web con la meta de mostrarte siempre la información más veraz y actualizada.

Solución:

Puede especificar el color opción como una lista directamente a la plot función.

from matplotlib import pyplot as plt
from itertools import cycle, islice
import pandas, numpy as np  # I find np.random.randint to be better

# Make the data
x = [i:np.random.randint(1,5) for i in range(10)]
df = pandas.DataFrame(x)

# Make a list by cycling through the colors you care about
# to match the length of your data.
my_colors = list(islice(cycle(['b', 'r', 'g', 'y', 'k']), None, len(df)))

# Specify this list of colors as the `color` option to `plot`.
df.plot(kind='bar', stacked=True, color=my_colors)

Para definir su propia lista personalizada, puede hacer algunas de las siguientes cosas, o simplemente buscar las técnicas de Matplotlib para definir un elemento de color por sus valores RGB, etc. Puede volverse tan complicado como quiera con esto.

my_colors = ['g', 'b']*5 # <-- this concatenates the list to itself 5 times.
my_colors = [(0.5,0.4,0.5), (0.75, 0.75, 0.25)]*5 # <-- make two custom RGBs and repeat/alternate them over all the bar elements.
my_colors = [(x/10.0, x/20.0, 0.75) for x in range(len(df))] # <-- Quick gradient example along the Red/Green dimensions.

El último ejemplo produce el siguiente degradado simple de colores para mí:

ingrese la descripción de la imagen aquí

No jugué con él el tiempo suficiente para descubrir cómo obligar a la leyenda a seleccionar los colores definidos, pero estoy seguro de que puedes hacerlo.

Sin embargo, en general, un gran consejo es usar las funciones de Matplotlib directamente. Llamarlos desde Pandas está bien, pero creo que obtiene mejores opciones y rendimiento llamándolos directamente desde Matplotlib.

Encontré que la forma más fácil es usar el colormap parámetro en .plot() con uno de los degradados de color predeterminados:

df.plot(kind='bar', stacked=True, colormap='Paired')

ingrese la descripción de la imagen aquí

Puede encontrar una gran lista de mapas de colores preestablecidos aquí.

mapas de colores

Para obtener una respuesta más detallada sobre la creación de sus propios mapas de colores, recomiendo visitar esta página

Si esa respuesta es demasiado trabajo, puede hacer rápidamente su propia lista de colores y pasarlos al color parámetro. Todos los mapas de colores están en el cm Módulo matplotlib. Obtengamos una lista de 30 valores de color RGB (más alfa) del mapa de colores inferno invertido. Para hacerlo, primero obtenga el mapa de colores y luego pásele una secuencia de valores entre 0 y 1. Aquí, usamos np.linspace para crear 30 valores equidistantes entre 0,4 y 0,8 que representen esa parte del mapa de colores.

from matplotlib import cm
color = cm.inferno_r(np.linspace(.4, .8, 30))
color

array([[ 0.865006,  0.316822,  0.226055,  1.      ],
       [ 0.851384,  0.30226 ,  0.239636,  1.      ],
       [ 0.832299,  0.283913,  0.257383,  1.      ],
       [ 0.817341,  0.270954,  0.27039 ,  1.      ],
       [ 0.796607,  0.254728,  0.287264,  1.      ],
       [ 0.775059,  0.239667,  0.303526,  1.      ],
       [ 0.758422,  0.229097,  0.315266,  1.      ],
       [ 0.735683,  0.215906,  0.330245,  1.      ],
       .....

Luego podemos usar esto para trazar, usando los datos de la publicación original:

import random
x = [i: random.randint(1, 5) for i in range(30)]
df = pd.DataFrame(x)
df.plot(kind='bar', stacked=True, color=color, legend=False, figsize=(12, 4))

ingrese la descripción de la imagen aquí

Comentarios y puntuaciones

Si guardas alguna desconfianza y disposición de aclararse nuestro artículo te evocamos añadir una apostilla y con mucho placer lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *