TL; DR Non, cela ne peut pas être fait automatiquement . Oui c'est possible.
import matplotlib.pyplot as plt
my_colors = plt.rcParams['axes.prop_cycle']() # <<< note that we CALL the prop_cycle
fig, axes = plt.subplots(2,3)
for ax in axes.flatten(): ax.plot((0,1), (0,1), **next(my_colors))
Chaque tracé ( axes
) dans une figure ( figure
) a son propre cycle de couleurs - si vous ne forcez pas une couleur différente pour chaque tracé, tous les tracés partagent le même ordre de couleurs mais, si nous étirons un peu ce que signifie "automatiquement" , ça peut être fait.
L'OP a écrit
[...] Je dois identifier chaque tracé avec une couleur différente qui devrait être générée automatiquement par [Matplotlib].
Mais ... Matplotlib génère automatiquement des couleurs différentes pour chaque courbe différente
In [10]: import numpy as np
...: import matplotlib.pyplot as plt
In [11]: plt.plot((0,1), (0,1), (1,2), (1,0));
Out[11]:
Alors pourquoi la demande OP? Si nous continuons à lire, nous avons
Pouvez-vous s'il vous plaît me donner une méthode pour mettre différentes couleurs pour différentes parcelles dans la même figure?
et cela a du sens, car chaque intrigue (chacune axes
dans le langage de Matplotlib) a sa propre color_cycle
(ou plutôt, en 2018, son prop_cycle
) et chaque intrigue ( axes
) réutilise les mêmes couleurs dans le même ordre.
In [12]: fig, axes = plt.subplots(2,3)
In [13]: for ax in axes.flatten():
...: ax.plot((0,1), (0,1))
Si tel est le sens de la question d'origine, une possibilité consiste à nommer explicitement une couleur différente pour chaque tracé.
Si les tracés (comme cela arrive souvent) sont générés dans une boucle, nous devons avoir une variable de boucle supplémentaire pour remplacer la couleur choisie automatiquement par Matplotlib.
In [14]: fig, axes = plt.subplots(2,3)
In [15]: for ax, short_color_name in zip(axes.flatten(), 'brgkyc'):
...: ax.plot((0,1), (0,1), short_color_name)
Une autre possibilité consiste à instancier un objet cycler
from cycler import cycler
my_cycler = cycler('color', ['k', 'r']) * cycler('linewidth', [1., 1.5, 2.])
actual_cycler = my_cycler()
fig, axes = plt.subplots(2,3)
for ax in axes.flat:
ax.plot((0,1), (0,1), **next(actual_cycler))
Notez que type(my_cycler)
c'est cycler.Cycler
mais type(actual_cycler)
est itertools.cycle
.
set_color_cycle
a été déconseillé, de sorte que cette ligne devrait êtreplt.gca().set_prop_cycle(plt.cycler('color', plt.cm.jet(np.linspace(0, 1, num_plots))))
et juste changer leplt.cm.YOUR_PREFERED_COLOR_MAP
pour l'adapter à vos besoins.