Me di cuenta cuando trazaste que la primera línea es azul, luego verde, luego roja, y así sucesivamente.
¿Existe alguna forma de acceder a esta lista de colores? He visto un millón de publicaciones sobre cómo cambiar el ciclo de color o acceder al iterador, pero no sobre cómo obtener la lista de colores que matplotlib recorre de forma predeterminada.
matplotlib
Pedro
fuente
fuente
lines_colour_cycle = [p['color'] for p in plt.rcParams['axes.prop_cycle']]
plt.rcParams['axes.prop_cycle'].by_key()['color']
A menudo, no es necesario obtener el ciclo de color predeterminado desde cualquier lugar, ya que es el predeterminado, por lo que basta con usarlo.
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) for i in range(4): line, = ax.plot(t,i*(t+1), linestyle = '-') ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':') plt.show()
En caso de que desee utilizar el ciclo de color predeterminado para algo diferente, existen, por supuesto, varias opciones.
mapa de colores "tab10"
Primero debe mencionarse que el
"tab10"
mapa de colores comprende los colores del ciclo de color predeterminado, puede obtenerlo a través decmap = plt.get_cmap("tab10")
.Equivalente a lo anterior sería por tanto
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) cmap = plt.get_cmap("tab10") for i in range(4): ax.plot(t,i*(t+1), color=cmap(i), linestyle = '-') ax.plot(t,i*(t+1)+.3,color=cmap(i), linestyle = ':') plt.show()
Colores del ciclo de color
También puede utilizar el dispositivo de ciclos de color directamente,
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']
. Esto da una lista con los colores del ciclo, que puede usar para iterar.import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) cycle = plt.rcParams['axes.prop_cycle'].by_key()['color'] for i in range(4): ax.plot(t,i*(t+1), color=cycle[i], linestyle = '-') ax.plot(t,i*(t+1)+.3,color=cycle[i], linestyle = ':') plt.show()
La
CN
notaciónPor último, la
CN
notación que permite obtener laN
XX color del ciclo de colorcolor="C{}".format(i)
. Sin embargo, esto solo funciona para los primeros 10 colores (N in [0,1,...9]
)import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(5) for i in range(4): ax.plot(t,i*(t+1), color="C{}".format(i), linestyle = '-') ax.plot(t,i*(t+1)+.3,color="C{}".format(i), linestyle = ':') plt.show()
Todos los códigos presentados aquí producen el mismo gráfico.
fuente
CN
notación debería ser mucho más prominente en tu respuesta, casi me la pierdo. Sospecho que la gran mayoría de los casos de uso está contento con poder acceder solo a los primeros 10 colores, y pasar'C1'
un amigo es mucho menos repetitivo que agarrar explícitamente el ciclo de accesorios.La notación CN revisada
Me gustaría abordar un nuevo desarrollo de Matplotlib. En una respuesta anterior leemos
pero
import numpy as np import matplotlib.pyplot as plt t = np.linspace(0,6.28, 629) for N in (1, 2): C0N, C1N = 'C%d'%(N), 'C%d'%(N+10) plt.plot(t, N*np.sin(t), c=C0N, ls='-', label='c='+C0N) plt.plot(t, N*np.cos(t), c=C1N, ls='--', label='c='+C1N) plt.legend() ; plt.grid() ; plt.show()
da
fuente
si está buscando un resumen rápido para obtener los colores RGB que matplotlib usa para sus líneas, aquí está:
>>> import matplotlib; print('\n'.join([str(matplotlib.colors.to_rgb(c)) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']])) (0.12156862745098039, 0.4666666666666667, 0.7058823529411765) (1.0, 0.4980392156862745, 0.054901960784313725) (0.17254901960784313, 0.6274509803921569, 0.17254901960784313) (0.8392156862745098, 0.15294117647058825, 0.1568627450980392) (0.5803921568627451, 0.403921568627451, 0.7411764705882353) (0.5490196078431373, 0.33725490196078434, 0.29411764705882354) (0.8901960784313725, 0.4666666666666667, 0.7607843137254902) (0.4980392156862745, 0.4980392156862745, 0.4980392156862745) (0.7372549019607844, 0.7411764705882353, 0.13333333333333333) (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)
O para uint8:
import matplotlib; print('\n'.join([str(tuple(int(round(v*255)) for v in matplotlib.colors.to_rgb(c))) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']])) (31, 119, 180) (255, 127, 14) (44, 160, 44) (214, 39, 40) (148, 103, 189) (140, 86, 75) (227, 119, 194) (127, 127, 127) (188, 189, 34) (23, 190, 207)
fuente