python - facecolors - pyplot set color
trazando diferentes colores en matplotlib (3)
Esta pregunta ya tiene una respuesta aquí:
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
- un nombre de color corto (como
"k"
para negro), - una referencia a un color del ciclo de color actual (como
"C3"
, es decir, la letra"C"
seguida de un solo dígito en"0-9"
) - un nombre de color largo (como
"teal"
) --- también conocido como nombre de color HTML - una cadena hexadecimal RGB / RGBA (como
"#008080"
(RGB) o"#008080A0"
) - una tupla de flotantes que representa RGB o RGBA (como
(0.,0.5,0.5)
)
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)