2011-02-11 17 views

Respuesta

43

En 1.0+ versiones de que matplotlib puede usar axes.color_cycle (vea, example), y en versiones anteriores, Axes.set_default_color_cycle (vea, example).

+0

Más en la línea de lo que estaba buscando ... ¿Alguna posibilidad de que pueda agregar información sobre cómo usar un mapa de colores para generar una lista de N colores? – dlamotte

+14

@xyld - No puedo tapar demasiado mi propia respuesta, pero hay un ejemplo al final de esta respuesta: http://stackoverflow.com/questions/4805048/how-to-get-different-lines-for-different- plot-in-a-single-figure/4805456 # 4805456 Básicamente debes hacer esto: '[colormap (i) for i in np.linspace (0, 0.9, num_plots)]', donde 'colormap' es uno de los mapas de color en 'matplotlib.pyplot.cm' y' numplots' es la cantidad de colores únicos que desea. Sin embargo, ten en cuenta que esto puede dar lugar a colores que son difíciles de distinguir el uno del otro. –

+4

Buena respuesta Joe, y parece responder a la pregunta de xyld, así que lo dejaré así. También, sin embargo, vale la pena señalar que hay algunas buenas respuestas a la pregunta sobre la generación de colores distintos, como http://stackoverflow.com/questions/470690/how-to-automatically-generate-n-distinct-colors/4382138# 4382138 – tom10

5

No sé si se puede cambiar automáticamente el color, pero se puede explotar su bucle para generar diferentes colores:

for i in range(20): 
    ax1.plot(x, y, color = (0, i/20.0, 0, 1) 

En este caso, los colores pueden variar de negro al 100% verde, pero puedes sintonizarlo si quieres.

Consulte el matplotlib plot() docs y busque el argumento de palabra clave color.

Si desea alimentar una lista de colores, sólo asegúrese de que usted tiene una lista bastante grande y luego utilizar el índice del bucle para seleccionar el color

colors = ['r', 'b', ...., 'w'] 

for i in range(20): 
    ax1.plot(x, y, color = colors[i]) 
+1

Sí, quería evitar hacer algo como esto. Miré en Color Maps, pero estoy bastante confundido sobre cómo usarlos. – dlamotte

0

También puede cambiar el ciclo de color predeterminado en su archivo matplotlibrc. Si no sabe dónde está ese archivo, haga lo siguiente en Python:

import matplotlib 
matplotlib.matplotlib_fname() 

Esto le mostrará la ruta a su archivo matplotlibrc utilizado actualmente. En ese archivo encontrará entre muchas otras configuraciones también la de axes.color.cycle. Simplemente coloque la secuencia deseada de colores y la encontrará en cada trama que haga. Tenga en cuenta que también puede usar todos los nombres de color html válidos en matplotlib.

68

Im que usa 3ro uno de estos 3 ones generalmente, también I wasny que comprueba 1 y 2 versión.

from matplotlib.pyplot import cm 

#variable n should be number of curves to plot (I skipped this earlier thinking that it is obvious when looking at picture - srry my bad mistake xD): n=len(array_of_curves_to_plot) 
#version 1: 

color=cm.rainbow(np.linspace(0,1,n)) 
for i,c in zip(range(n),color): 
    ax1.plot(x, y,c=c) 

#or version 2: - faster and better: 

color=iter(cm.rainbow(np.linspace(0,1,n))) 
c=next(color) 
plt.plot(x,y,c=c) 

#or version 3: 

color=iter(cm.rainbow(np.linspace(0,1,n))) 
for i in range(n): 
    c=next(color) 
    ax1.plot(x, y,c=c) 

ejemplo de 3: example plot with iter,next color

+5

Para completar la respuesta, es necesario importar la biblioteca * cm *: _desde matplotlib.pyplot import cm_ – tashuhka

+0

Utilicé el n. ° 2. Tengo una lista de canales que necesito trazar, pero pueden ser de diferentes longitudes. Descubrí que establecer n = len de esa lista fue muy útil para asegurarnos de que los colores elegidos cubran el rango y puedas notar la diferencia. Si ese número es demasiado alto, es difícil ver la diferencia en los colores. – mauve

+2

'n' se debe asignar un valor, de lo contrario se encuentra el problema' NameError: nombre global 'n' no está definido'. – SparkAndShine

6

prop_cycle

color_cycle desfasada y en 1,5 a favor de esta generalización: http://matplotlib.org/users/whats_new.html#added-axes-prop-cycle-key-to-rcparams

# cycler is a separate package extracted matplotlib. 
from cycler import cycler 
import matplotlib.pyplot as plt 

plt.rc('axes', prop_cycle=(cycler('color', ['r', 'g', 'b']))) 
plt.plot([1, 2]) 
plt.plot([2, 3]) 
plt.plot([3, 4]) 
plt.plot([4, 5]) 
plt.plot([5, 6]) 
plt.show() 

También se muestra en el ejemplo (ahora mal llamada): http://matplotlib.org/1.5.1/examples/color/color_cycle_demo.html mencionado en: https://stackoverflow.com/a/4971431/895245

Probado en matplotlib 1.5.1.

Cuestiones relacionadas