xkcd pyplot facecolors color python matplotlib

python - facecolors - pyplot set color



trazando diferentes colores en matplotlib (3)

Supongamos que tengo un ciclo for y quiero trazar puntos en diferentes colores:

for i in range(5): plt.plot(x,y,col=i)

¿Cómo cambio automáticamente los colores en el ciclo for?


@tcaswell ya respondió, pero estaba escribiendo mi respuesta, así que voy a publicarla ...

Hay varias formas diferentes de hacerlo. Para empezar, matplotlib automáticamente los colores. Por defecto, se desplaza por azul, verde, rojo, cian, magenta, amarillo, negro:

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 1, 10) for i in range(1, 6): plt.plot(x, i * x + i, label=''$y = {i}x + {i}$''.format(i=i)) plt.legend(loc=''best'') plt.show()

Si desea controlar los colores por los que pasa matplotlib, utilice ax.set_color_cycle :

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 1, 10) fig, ax = plt.subplots() ax.set_color_cycle([''red'', ''black'', ''yellow'']) for i in range(1, 6): plt.plot(x, i * x + i, label=''$y = {i}x + {i}$''.format(i=i)) plt.legend(loc=''best'') plt.show()

Si desea especificar explícitamente los colores que se utilizarán, simplemente páselo al kwarg de color (se aceptan nombres de colores html, como rgb tuples y cadenas hexagonales):

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 1, 10) for i, color in enumerate([''red'', ''black'', ''blue'', ''brown'', ''green''], start=1): plt.plot(x, i * x + i, color=color, label=''$y = {i}x + {i}$''.format(i=i)) plt.legend(loc=''best'') plt.show()

Finalmente, si desea seleccionar automáticamente una cantidad específica de colores de un mapa de colores existente :

import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 1, 10) number = 5 cmap = plt.get_cmap(''gnuplot'') colors = [cmap(i) for i in np.linspace(0, 1, number)] for i, color in enumerate(colors, start=1): plt.plot(x, i * x + i, color=color, label=''$y = {i}x + {i}$''.format(i=i)) plt.legend(loc=''best'') plt.show()


La excelente respuesta de ya tiene 4 años, Matplotlib ha cambiado de forma incremental (en particular, la introducción del módulo cycler ) y la nueva versión principal, Matplotlib 2.0.x, ha introducido diferencias estilísticas que son importantes desde el punto de vista de los colores utilizados por defecto.

El color de las líneas individuales

El color de las líneas individuales (así como también el color de los diferentes elementos de la gráfica, por ejemplo, los marcadores en diagramas de dispersión) está controlado por el argumento de la palabra clave de color ,

plt.plot(x, y, color=my_color)

my_color es cualquiera

El ciclo de color

De forma predeterminada, las diferentes líneas se trazan utilizando diferentes colores, que se definen de forma predeterminada y se utilizan de forma cíclica (de ahí el nombre de ciclo de color ).

El ciclo de color es una propiedad del objeto axes , y en versiones anteriores era simplemente una secuencia de nombres de color válidos (por defecto una cadena de nombres de color de un carácter, "bgrcmyk" ) y se podía configurar como en

my_ax.set_color_cycle([''kbkykrkg''])

(Como se señala en un comentario, esta API ha quedado obsoleta, más sobre esto más adelante).

En Matplotlib 2.0, el ciclo de color predeterminado es ["#1f77b4", "#ff7f0e", "#2ca02c", "#d62728", "#9467bd", "#8c564b", "#e377c2", "#7f7f7f", "#bcbd22", "#17becf"] , la paleta Vega categoría 10 .

(la imagen es una captura de pantalla de https://vega.github.io/vega/docs/schemes/ )

El módulo de cicladora : ciclos compostables

El siguiente código muestra que la noción de ciclo de color ha quedado obsoleta

In [1]: from matplotlib import rc_params In [2]: rc_params()[''axes.color_cycle''] /home/boffi/lib/miniconda3/lib/python3.6/site-packages/matplotlib/__init__.py:938: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter. warnings.warn(self.msg_depr % (key, alt_key)) Out[2]: [''#1f77b4'', ''#ff7f0e'', ''#2ca02c'', ''#d62728'', ''#9467bd'', ''#8c564b'', ''#e377c2'', ''#7f7f7f'', ''#bcbd22'', ''#17becf'']

Ahora la propiedad relevante es el ''axes.prop_cycle''

In [3]: rc_params()[''axes.prop_cycle''] Out[3]: cycler(''color'', [''#1f77b4'', ''#ff7f0e'', ''#2ca02c'', ''#d62728'', ''#9467bd'', ''#8c564b'', ''#e377c2'', ''#7f7f7f'', ''#bcbd22'', ''#17becf''])

Anteriormente, color_cycle era una secuencia genérica de denominaciones de color válidas, ahora de forma predeterminada es un objeto cycler que contiene una etiqueta ( ''color'' ) y una secuencia de denominaciones de color válidas. El paso adelante con respecto a la interfaz anterior es que es posible realizar un ciclo no solo en el color de las líneas, sino también en otros atributos de línea, por ejemplo,

In [5]: from cycler import cycler In [6]: new_prop_cycle = cycler(''color'', [''k'', ''r'']) * cycler(''linewidth'', [1., 1.5, 2.]) In [7]: for kwargs in new_prop_cycle: print(kwargs) {''color'': ''k'', ''linewidth'': 1.0} {''color'': ''k'', ''linewidth'': 1.5} {''color'': ''k'', ''linewidth'': 2.0} {''color'': ''r'', ''linewidth'': 1.0} {''color'': ''r'', ''linewidth'': 1.5} {''color'': ''r'', ''linewidth'': 2.0}

Como has visto, los objetos del cycler son compostables y cuando iteras en un cycler compuesto, lo que obtienes, en cada iteración, es un diccionario de argumentos de palabra clave para plt.plot .

Puede usar los nuevos valores predeterminados en una proporción de objeto por axes ,

my_ax.set_prop_cycle(new_prop_cycle)

o puede instalar temporalmente el nuevo valor predeterminado

plt.rc(''axes'', prop_cycle=new_prop_cycle)

o cambie por completo la edición predeterminada de su archivo .matplotlibrc .

Última posibilidad, use un administrador de contexto

with plt.rc_context({''axes.prop_cycle'': new_prop_cycle}): ...

tener el nuevo cycler utilizado en un grupo de diferentes gráficos, volviendo a los valores predeterminados al final del contexto.

La cadena de documentación de la función cycler() es útil, pero los detalles (no tanto) sangrientos sobre el módulo cycler y la función cycler() , así como ejemplos, se pueden encontrar en los documentos finos .


for color in [''r'', ''b'', ''g'', ''k'', ''m'']: plot(x, y, color=color)