Dans le code de la question, chaque sous-parcelle a son propre cycle de couleur, de sorte que next
vous donne la deuxième couleur du cycle de couleur des axes dans chaque sous-parcelle.
Une solution serait de partager le même cycle de couleur entre tous les sous-plans.
Pour le cas où vous créez les intrigues secondaires à l'intérieur de la boucle, vous pouvez utiliser
import matplotlib.pyplot as plt
import numpy as np
a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
lab = np.array(["A","B","C","E"])
for k in xrange(4):
ax1 = plt.subplot2grid((4, 1), (k, 0))
if k==0:
c = ax1._get_lines.prop_cycler
else:
ax1._get_lines.prop_cycler = c
ax1.plot(a[:,k])
plt.legend(labels=lab[k:k+1])
plt.show()
Ou dans un cas où des intrigues secondaires sont créés à la fois,
import matplotlib.pyplot as plt
import numpy as np
a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
lab = np.array(["A","B","C","E"])
fig, axes = plt.subplots(4,1)
for k, ax in enumerate(axes):
ax._get_lines.prop_cycler = axes[0]._get_lines.prop_cycler
ax.plot(a[:,k])
ax.legend(labels=lab[k])
plt.show()
Bien sûr, vous pouvez aussi utiliser le cycleur de couleur de chaque axe individuellement et le propager à la prochaine couleur
import matplotlib.pyplot as plt
import numpy as np
a = np.cumsum(np.cumsum(np.random.randn(7,4), axis=0), axis=1)
lab = np.array(["A","B","C","E"])
fig, axes = plt.subplots(4,1)
for k, ax in enumerate(axes):
for i in range(k):
next(ax._get_lines.prop_cycler)
ax.plot(a[:,k])
ax.legend(labels=lab[k])
plt.show()
Dans tous les cas le résultat ressemblerait à ceci:
Je pense que vous vouliez créer un lien vers quelque chose avec « cet exemple »? En ce qui concerne 'next' j'ai mis à jour [ma réponse précédente] (https://stackoverflow.com/a/46672037/4124317) pour inclure des options pour python 2 ou 3 (' next (ax._get_lines.prop_cycler) '). – ImportanceOfBeingErnest
Merci d'avoir repéré le chaînon manquant –