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 disperser le diagramme ceci:
from matplotlib import pyplot as plt
plt.scatter(X,Y1,color='red')
plt.scatter(X,Y2,color='blue')
plt.show()
Comment puis-je faire cela avec 10 ensembles?
J'ai cherché ceci et j'ai pu trouver n'importe quelle référence à ce que je demande.
Edit: clarifier (j'espère) ma question
Si j'appelle scatter plusieurs fois, je ne peux définir la même couleur que sur chaque scatter. De plus, je sais que je peux définir un tableau de couleurs manuellement, mais je suis sûr qu'il existe une meilleure façon de le faire. Ma question est alors: «Comment puis-je automatiquement disperser mes différents ensembles de données, chacun avec une couleur différente.
Si cela aide, je peux facilement attribuer un numéro unique à chaque ensemble de données.
Réponses:
Je ne sais pas ce que vous entendez par «manuellement». Vous pouvez choisir une carte de couleurs et créer un tableau de couleurs assez facilement:
Ou vous pouvez créer votre propre cycleur de couleurs en utilisant
itertools.cycle
et en spécifiant les couleurs sur lesquelles vous voulez boucler, en utilisantnext
pour obtenir celle que vous voulez. Par exemple, avec 3 couleurs:À bien y penser, il est peut-être plus propre de ne pas non plus utiliser
zip
le premier:la source
plt.legend(['c{}'.format(i) for i in range(len(ys))], loc=2, bbox_to_anchor=(1.05, 1), borderaxespad=0., fontsize=11)
en bas ce qui précède me donne une légende avec des couleurs.La manière normale de tracer des tracés avec des points de différentes couleurs dans matplotlib est de passer une liste de couleurs comme paramètre.
Par exemple:
Lorsque vous avez une liste de listes et que vous voulez les colorer par liste. Je pense que le moyen le plus élégant est celui suggéré par @DSM, il suffit de faire une boucle en effectuant plusieurs appels pour se disperser.
Mais si pour une raison quelconque vous vouliez le faire avec un seul appel, vous pouvez faire une grande liste de couleurs, avec une compréhension de la liste et un peu de division du revêtement de sol:
la source
Une solution facile
Si vous n'avez qu'un seul type de collections (par exemple, dispersion sans barres d'erreur), vous pouvez également changer les couleurs après les avoir tracées, c'est parfois plus facile à réaliser.
Le seul morceau de code dont vous avez besoin:
La sortie vous donne des couleurs différentes même lorsque vous avez de nombreux nuages de points différents dans le même sous-diagramme.
la source
Vous pouvez toujours utiliser la
plot()
fonction comme ceci:la source
Cette question est un peu délicate avant janvier 2013 et matplotlib 1.3.1 (août 2013), qui est la plus ancienne version stable que vous pouvez trouver sur le site matpplotlib. Mais après cela, c'est assez trivial.
Parce que la version actuelle du
matplotlib.pylab.scatter
support attribue: tableau de chaîne de nom de couleur, tableau de nombre flottant avec carte de couleur, tableau de RVB ou RVBA.cette réponse est dédiée à la passion sans fin de @ Oxinabox pour corriger la version 2013 de moi-même en 2015.
vous avez deux options pour utiliser la commande scatter avec plusieurs couleurs en un seul appel.
comme
pylab.scatter
support de commande, utilisez le tableau RGBA pour faire la couleur que vous voulez;au début de 2013, il n'y a aucun moyen de le faire, car la commande ne prend en charge qu'une seule couleur pour toute la collection de points de dispersion. Lorsque je faisais mon projet de 10000 lignes, j'ai trouvé une solution générale pour le contourner. donc c'est très collant, mais je peux le faire dans n'importe quelle forme, couleur, taille et transparent. cette astuce pourrait également être appliquée pour dessiner une collection de chemins, une collection de lignes ...
le code est également inspiré du code source de
pyplot.scatter
, je viens de dupliquer ce que fait scatter sans le déclencher pour dessiner.la commande
pyplot.scatter
retourne unPatchCollection
Object, dans le fichier "matplotlib / collections.py" une variable privée_facecolors
enCollection
classe et une méthodeset_facecolors
.Ainsi, chaque fois que vous avez un point de dispersion à dessiner, vous pouvez le faire:
la source
Cela fonctionne pour moi:
pour chaque série, utilisez un générateur de couleurs RVB aléatoire
la source
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 '()'Une solution BEAUCOUP plus rapide pour un grand ensemble de données et un nombre limité de couleurs est l'utilisation de Pandas et de la fonction groupby:
la source