123 votes

Comment générer des couleurs aléatoires dans matplotlib ?

Quel est l'exemple trivial permettant de générer des couleurs aléatoires à transmettre aux fonctions de traçage ?

J'appelle scatter dans une boucle et je veux que chaque graphique ait une couleur différente.

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

c : une couleur. c peut être une simple chaîne de format de couleur, ou une séquence de spécifications de couleur de longueur N, ou une séquence de N nombres à mettre en correspondance avec des couleurs en utilisant cmap et la norme spécifiée via kwargs (voir ci-dessous). Notez que c ne doit pas être une séquence numérique unique RVB ou RGBA, car il est impossible de la distinguer d'un tableau de valeurs à mettre en correspondance. c peut cependant être un tableau 2-D dont les lignes sont RVB ou RGBA.

19voto

J. Doe Points 1092

Puisque la question est How to generate random colors in matplotlib? et comme je cherchais une réponse concernant pie plots je pense qu'il vaut la peine d'y répondre ici (pour pies )

import numpy as np
from random import sample
import matplotlib.pyplot as plt
import matplotlib.colors as pltc
all_colors = [k for k,v in pltc.cnames.items()]

fracs = np.array([600, 179, 154, 139, 126, 1185])
labels = ["label1", "label2", "label3", "label4", "label5", "label6"]
explode = ((fracs == max(fracs)).astype(int) / 20).tolist()

for val in range(2):
    colors = sample(all_colors, len(fracs))
    plt.figure(figsize=(8,8))
    plt.pie(fracs, labels=labels, autopct='%1.1f%%', 
            shadow=True, explode=explode, colors=colors)
    plt.legend(labels, loc=(1.05, 0.7), shadow=True)
    plt.show()

Sortie

enter image description here

enter image description here

10voto

Champitoad Points 101

Voici une version plus concise de la réponse d'Ali donnant une couleur distincte par parcelle :

import matplotlib.pyplot as plt

N = len(data)
cmap = plt.cm.get_cmap("hsv", N+1)
for i in range(N):
    X,Y = data[i]
    plt.scatter(X, Y, c=cmap(i))

7voto

ai-shwarya Points 91

Basé sur la réponse d'Ali et de Champitoad :

Si vous voulez essayer différentes palettes pour la même chose, vous pouvez le faire en quelques lignes :

cmap=plt.cm.get_cmap(plt.cm.viridis, 143)

143 étant le nombre de couleurs que vous échantillonnez

J'ai choisi 143 parce que toute la gamme de couleurs de la carte des couleurs entre en jeu ici. Ce que vous pouvez faire, c'est échantillonner la n-ième couleur à chaque itération pour obtenir l'effet de la carte des couleurs.

n=20
for i,(x,y) in enumerate(points):
    plt.scatter(x, y, c=cmap(n*i))

4voto

Aman Bagrecha Points 231

Résultats reproductibles

# generate random colors
colors_ = lambda n: list(map(lambda i: "#" + "%06x" % random.randint(0, 0xFFFFFF),range(n)))

fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)

# how many random colors to generate?
colors = colors_(6)
for i,color in zip(range(1, 7), colors):
    ax = fig.add_subplot(2, 3, i)
    ax.text(0.5, 0.5, str((2, 3, i)),
           fontsize=18, ha='center', color=color)

sortie

2voto

Ale Solano Points 61

Améliorer la réponse https://stackoverflow.com/a/14720445/6654512 pour fonctionner avec Python3. Ce morceau de code générait parfois des nombres supérieurs à 1 et matplotlib générait une erreur.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X