Je ne voudrais PAS spécifier de couleur pour chaque ligne tracée et que chaque ligne obtienne une couleur distincte. Mais si je cours:
from matplotlib import pyplot as plt
for i in range(20):
plt.plot([0, 1], [i, i])
plt.show()
alors j'obtiens cette sortie:
Si vous regardez l'image ci-dessus, vous pouvez voir que matplotlib tente de choisir des couleurs différentes pour chaque ligne, mais finalement il réutilise les couleurs - les dix lignes du haut utilisent les mêmes couleurs que les dix du bas. Je veux juste l'empêcher de répéter des couleurs déjà utilisées ET / OU lui donner une liste de couleurs à utiliser.
matplotlib
dlamotte
la source
la source
[colormap(i) for i in np.linspace(0, 0.9, num_plots)]
oùcolormap
est l'une des couleursmatplotlib.pyplot.cm
etnumplots
est le numéro de couleurs uniques que vous voulez. Attention, cela peut entraîner des couleurs difficiles à distinguer les unes des autres !!J'utilise généralement le deuxième de ceux-ci:
Exemple de 2:
la source
prop_cycle
color_cycle
a été déconseillée dans la 1.5 au profit de cette généralisation: http://matplotlib.org/users/whats_new.html#added-axes-prop-cycle-key-to-rcparamsÉgalement illustré dans l'exemple (maintenant mal nommé): http://matplotlib.org/1.5.1/examples/color/color_cycle_demo.html mentionné à: https://stackoverflow.com/a/4971431/895245
Testé dans matplotlib 1.5.1.
la source
Je ne sais pas si vous pouvez changer automatiquement la couleur, mais vous pourriez exploiter votre boucle pour générer différentes couleurs:
Dans ce cas, les couleurs varieront du noir au vert à 100%, mais vous pouvez l'ajuster si vous le souhaitez.
Consultez la documentation de matplotlib plot () et recherchez l'
color
argument mot - clé.Si vous souhaitez alimenter une liste de couleurs, assurez-vous simplement que vous avez une liste assez grande puis utilisez l'index de la boucle pour sélectionner la couleur
la source
Vous pouvez utiliser une "palette de couleurs qualitative" prédéfinie comme ceci:
Testé sur matplotlib 3.0.3. Voir https://github.com/matplotlib/matplotlib/issues/10840 pour savoir pourquoi vous ne pouvez pas appeler
axes.set_prop_cycle(color=cmap)
.Une liste de couleurs prédéfinies qualitatives est disponible sur https://matplotlib.org/gallery/color/colormap_reference.html :
la source
Vous pouvez également modifier le cycle de couleurs par défaut dans votre
matplotlibrc
fichier. Si vous ne savez pas où se trouve ce fichier, procédez comme suit en python:Cela vous montrera le chemin vers votre fichier matplotlibrc actuellement utilisé. Dans ce fichier, vous trouverez parmi de nombreux autres paramètres également celui pour
axes.color.cycle
. Mettez simplement votre séquence de couleurs désirée et vous la trouverez dans chaque tracé que vous créez. Notez que vous pouvez également utiliser tous les noms de couleurs html valides dans matplotlib.la source
Comme les notes de réponse de Ciro , vous pouvez utiliser
prop_cycle
pour définir une liste de couleurs que matplotlib doit parcourir. Mais combien de couleurs? Que faire si vous souhaitez utiliser le même cycle de couleurs pour de nombreux tracés, avec des nombres de lignes différents?Une tactique serait d'utiliser une formule comme celle de https://gamedev.stackexchange.com/a/46469/22397 , pour générer une séquence infinie de couleurs où chaque couleur essaie d'être significativement différente de toutes celles qui l'ont précédée.
Malheureusement,
prop_cycle
n'acceptera pas les séquences infinies - il se bloquera pour toujours si vous en passez une. Mais nous pouvons prendre, par exemple, les 1000 premières couleurs générées à partir d'une telle séquence et les définir comme cycle de couleurs. De cette façon, pour les tracés avec un nombre raisonnable de lignes, vous devriez obtenir des couleurs distinctes.Exemple:
Production:
Maintenant, toutes les couleurs sont différentes - même si j'avoue que j'ai du mal à en distinguer quelques-unes!
la source