Saltar al contenido

¿Cómo generar colores aleatorios en matplotlib?

Es imprescindible comprender el código de forma correcta antes de utilizarlo a tu proyecto si ttienes algo que aportar puedes dejarlo en la sección de comentarios.

Solución:

Llamo a la dispersión dentro de un bucle y quiero que cada gráfico tenga un color diferente.

Basado en eso, y en su respuesta: me parece que realmente quiere ndistinto colores para sus conjuntos de datos; desea mapear los índices enteros 0, 1, ..., n-1 a distintos colores RGB. Algo como:

índice de mapeo a color

Aquí está la función para hacerlo:

import matplotlib.pyplot as plt

def get_cmap(n, name='hsv'):
    '''Returns a function that maps each index in 0, 1, ..., n-1 to a distinct 
    RGB color; the keyword argument name must be a standard mpl colormap name.'''
    return plt.cm.get_cmap(name, n)

uso en su seudo-fragmento de código en la pregunta:

cmap = get_cmap(len(data))
for i, (X, Y) in enumerate(data):
   scatter(X, Y, c=cmap(i))

Generé la figura en mi respuesta con el siguiente código:

import matplotlib.pyplot as plt

def get_cmap(n, name='hsv'):
    '''Returns a function that maps each index in 0, 1, ..., n-1 to a distinct 
    RGB color; the keyword argument name must be a standard mpl colormap name.'''
    return plt.cm.get_cmap(name, n)

def main():
    N = 30
    fig=plt.figure()
    ax=fig.add_subplot(111)   
    plt.axis('scaled')
    ax.set_xlim([ 0, N])
    ax.set_ylim([-0.5, 0.5])
    cmap = get_cmap(N)
    for i in range(N):
        rect = plt.Rectangle((i, -0.5), 1, 1, facecolor=cmap(i))
        ax.add_artist(rect)
    ax.set_yticks([])
    plt.show()

if __name__=='__main__':
    main()

Probado con Python 2.7 y matplotlib 1.5, y con Python 3.5 y matplotlib 2.0. Funciona como se esperaba.

for X,Y in data:
   scatter(X, Y, c=numpy.random.rand(3,))

elaborando la respuesta de @john-mee, si tiene datos arbitrariamente largos pero no necesita colores estrictamente únicos:

para pitón 2:

from itertools import cycle
cycol = cycle('bgrcmk')

for X,Y in data:
    scatter(X, Y, c=cycol.next())

para pitón 3:

from itertools import cycle
cycol = cycle('bgrcmk')

for X,Y in data:
    scatter(X, Y, c=next(cycol))

esto tiene la ventaja de que los colores son fáciles de controlar y que es corto.

Si te gustó nuestro trabajo, tienes la opción de dejar un post acerca de qué te ha parecido este post.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *