211 votes

Définition d'une couleur différente pour chaque série dans un nuage de points sur matplotlib

Supposons que j'ai trois ensembles de données :

X = [1,2,3,4]
Y1 = [4,8,12,16]
Y2 = [1,4,9,16]

Je peux faire un diagramme de dispersion :

from matplotlib import pyplot as plt
plt.scatter(X,Y1,color='red')
plt.scatter(X,Y2,color='blue')
plt.show()

Comment puis-je faire ça avec 10 séries ?

J'ai fait des recherches à ce sujet et je n'ai trouvé aucune référence à ce que je demande.

Edit : clarifiant (j'espère) ma question

Si j'appelle scatter plusieurs fois, je ne peux définir que la même couleur sur chaque scatter. Je sais aussi que je peux définir un tableau de couleurs manuellement, mais je suis sûr qu'il existe un meilleur moyen de le faire. Ma question est donc la suivante : "Comment puis-je faire automatiquement un nuage de points pour mes différents ensembles de données, chacun avec une couleur différente ?

Si cela peut aider, je peux facilement attribuer un numéro unique à chaque ensemble de données.

1 votes

Quelle est la question ici ? La couleur peut aussi être un tableau, mais qu'est-ce que vous ne pouvez pas résoudre en appelant scatter plusieurs fois ?

1 votes

Si j'appelle scatter plusieurs fois, j'obtiens les mêmes couleurs. Je vais mettre à jour ma question.

1voto

bracoo Points 21

Cela fonctionne pour moi :

pour chaque série, utiliser un générateur de couleur rgb aléatoire

c = color[np.random.random_sample(), np.random.random_sample(), np.random.random_sample()]

0 votes

Je ne sais pas quelle est votre variable de couleur, mais en utilisant votre approche il est possible de faire quelque chose comme : plt.scatter(your values to the graph, color= (np.random.random_sample(), np.random.random_sample(), np.random.random_sample()) ) . Vous avez mentionné un générateur RVB et vous avez déclaré une liste RVB, les générateurs sont déclarés entre '()'.

1voto

MdM Points 11

Une solution BEAUCOUP plus rapide pour les grands ensembles de données et un nombre limité de couleurs est l'utilisation de Pandas et de la fonction groupby :

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import time

# a generic set of data with associated colors
nsamples=1000
x=np.random.uniform(0,10,nsamples)
y=np.random.uniform(0,10,nsamples)
colors={0:'r',1:'g',2:'b',3:'k'}
c=[colors[i] for i in np.round(np.random.uniform(0,3,nsamples),0)]

plt.close('all')

# "Fast" Scatter plotting
starttime=time.time()
# 1) make a dataframe
df=pd.DataFrame()
df['x']=x
df['y']=y
df['c']=c
plt.figure()
# 2) group the dataframe by color and loop
for g,b in df.groupby(by='c'):
    plt.scatter(b['x'],b['y'],color=g)
print('Fast execution time:', time.time()-starttime)

# "Slow" Scatter plotting
starttime=time.time()
plt.figure()
# 2) group the dataframe by color and loop
for i in range(len(x)):
    plt.scatter(x[i],y[i],color=c[i])
print('Slow execution time:', time.time()-starttime)

plt.show()

-3voto

i.s. may Points 1

Vous pouvez également créer une liste de couleurs qui comprend toutes les couleurs dont vous avez besoin dans votre diagramme de dispersion et la donner comme paramètre à l'intérieur comme :

colors = ["red", "blue", "green"]
plt.scatter(X, Y, color = colors)

-6voto

Hualin Points 16

La fonction pyplot.scatter est une commande de haut niveau pour dessiner une collection de points, mais elle est conçue pour être assignée à une seule couleur à chaque appel de la commande scatter. Cependant, si vous piratez le code source de la fonction scatter de matplotlib, elle utilise l'objet PathCollection à l'intérieur et la Class Collection peut cependant être assignée à un tableau de couleurs différentes.

Veuillez consulter le code source de la fonction scatter de matplotlib et la documentation de Class Collection, PatchCollection et PathCollection.

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