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í:
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')
Puede encontrar una gran lista de mapas de colores preestablecidos aquí.
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))
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.