Accesso all'iteratore del ciclo del colore
Non esiste un metodo "rivolto all'utente" (noto anche come "pubblico") per accedere all'iteratore sottostante, ma è possibile accedervi tramite metodi "privati" (per convenzione). Tuttavia, non potresti ottenere lo stato di un iteratorsenza cambiarlo.
Impostazione del ciclo del colore
Spiegazione rapida: puoi impostare il ciclo colore / proprietà in vari modi (ad esempio ax.set_color_cyclenelle versioni <1.5 o ax.set_prop_cyclerin> = 1.5). Dai un'occhiata all'esempio qui per la versione 1.5 o successiva , o allo stile precedente qui .
Accesso all'iteratore sottostante
Tuttavia, sebbene non esista un metodo rivolto al pubblico per accedere all'iterabile, è possibile accedervi per un determinato oggetto assi ( ax) tramite l' _get_linesistanza della classe helper. ax._get_linesè un tocco chiamato in modo confuso, ma è il meccanismo dietro le quinte che consente al plotcomando di elaborare tutti i modi dispari e vari che plotpossono essere chiamati. Tra le altre cose, è ciò che tiene traccia dei colori da assegnare automaticamente. Allo stesso modo, c'è ax._get_patches_for_fillda controllare il ciclo tra i colori di riempimento predefiniti e le proprietà delle patch.
In ogni caso, il ciclo di colori iterabile è ax._get_lines.color_cycleper le linee e ax._get_patches_for_fill.color_cycleper le patch. Su matplotlib> = 1.5, questo è cambiato per usare la cyclerlibreria , e l'iterabile viene chiamato prop_cyclerinvece di color_cyclee restituisce una dictdelle proprietà invece del solo un colore.
Tutto sommato, faresti qualcosa del tipo:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
color_cycle = ax._get_lines.color_cycle
Non puoi visualizzare lo stato di un file iterator
Tuttavia, questo oggetto è un "nudo" iterator. Possiamo facilmente ottenere l'elemento successivo (ad esempio next_color = next(color_cycle), ma ciò significa che il colore successivo è quello che verrà stampato. In base alla progettazione, non c'è modo di ottenere lo stato corrente di un iteratore senza cambiarlo.
In v1.5o superiore, sarebbe bello ottenere l' cycleroggetto utilizzato, poiché potremmo dedurre il suo stato corrente. Tuttavia, l' cycleroggetto stesso non è accessibile (pubblicamente o privatamente) da nessuna parte. È invece accessibile solo l' itertools.cycleistanza creata cyclerdall'oggetto. In ogni caso, non c'è modo di arrivare allo stato sottostante del ciclatore colore / proprietà.
Abbina invece il colore dell'elemento tracciato in precedenza
Nel tuo caso, sembra che tu voglia abbinare il colore di qualcosa che è stato appena tracciato. Invece di cercare di determinare quale sarà il colore / proprietà, imposta il colore / ecc. Del tuo nuovo elemento in base alle proprietà di ciò che è stampato.
Ad esempio, nel caso che hai descritto, farei qualcosa del genere:
import matplotlib.pyplot as plt
import numpy as np
def custom_plot(x, y, **kwargs):
ax = kwargs.pop('ax', plt.gca())
base_line, = ax.plot(x, y, **kwargs)
ax.fill_between(x, 0.9*y, 1.1*y, facecolor=base_line.get_color(), alpha=0.5)
x = np.linspace(0, 1, 10)
custom_plot(x, x)
custom_plot(x, 2*x)
custom_plot(x, -x, color='yellow', lw=3)
plt.show()

Non è l'unico modo, ma in questo caso è più pulito che cercare di ottenere il colore della linea tracciata in anticipo.