Mengakses iterator siklus warna
Tidak ada metode "menghadap pengguna" (alias "publik") untuk mengakses iterator yang mendasarinya, tetapi Anda dapat mengaksesnya melalui metode "pribadi" (menurut konvensi). Namun, Anda tidak bisa mendapatkan keadaan iteratortanpa mengubahnya.
Mengatur siklus warna
Singkatnya: Anda dapat menyetel siklus warna / properti dalam berbagai cara (misalnya ax.set_color_cycledalam versi <1.5 atau ax.set_prop_cyclerdi> = 1.5). Lihat contoh di sini untuk versi 1.5 atau yang lebih baru , atau gaya sebelumnya di sini .
Mengakses iterator yang mendasari
Namun, meskipun tidak ada metode publik untuk mengakses iterable, Anda bisa mengaksesnya untuk objek sumbu tertentu ( ax) melalui _get_linesinstance kelas helper. ax._get_linesadalah sentuhan dengan nama yang membingungkan, tetapi mesin di belakang layarlah yang memungkinkan plotperintah untuk memproses semua cara aneh dan beragam yang plotdapat dipanggil. Antara lain, itulah yang melacak warna apa yang akan ditetapkan secara otomatis. Demikian pula, ada ax._get_patches_for_filluntuk mengontrol perputaran melalui warna isian default dan properti tambalan.
Bagaimanapun, siklus warna yang dapat diulang ax._get_lines.color_cycleuntuk garis dan ax._get_patches_for_fill.color_cycleuntuk tambalan. Pada matplotlib> = 1.5, ini telah diubah untuk menggunakan cyclerperpustakaan , dan iterable dipanggil prop_cyclersebagai ganti color_cycledan menghasilkan dictproperti alih-alih hanya warna.
Secara keseluruhan, Anda akan melakukan sesuatu seperti:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
color_cycle = ax._get_lines.color_cycle
Anda tidak dapat melihat status file iterator
Namun, objek ini adalah "telanjang" iterator. Kita bisa dengan mudah mendapatkan item berikutnya (misalnya next_color = next(color_cycle), tapi itu berarti warna berikutnya setelah itu akan diplot. Secara desain, tidak ada cara untuk mendapatkan status iterator saat ini tanpa mengubahnya.
Dalam v1.5atau lebih besar, alangkah baiknya untuk mendapatkan cyclerobjek yang digunakan, karena kita bisa menyimpulkan keadaannya saat ini. Namun, cyclerobjek itu sendiri tidak dapat diakses (secara publik atau pribadi) di mana pun. Sebaliknya, hanya itertools.cycleinstance yang dibuat dari cyclerobjek yang dapat diakses. Apa pun itu, tidak ada cara untuk mencapai status yang mendasari pengendara sepeda warna / properti.
Cocokkan warna item yang sebelumnya diplot
Dalam kasus Anda, sepertinya Anda ingin mencocokkan warna sesuatu yang baru saja diplot. Alih-alih mencoba menentukan warna / propertinya, tetapkan warna / dll dari item baru Anda berdasarkan properti dari apa yang diplot.
Misalnya, dalam kasus yang Anda jelaskan, saya akan melakukan sesuatu seperti ini:
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()

Ini bukan satu-satunya cara, tetapi lebih bersih daripada mencoba mendapatkan warna garis yang diplot sebelumnya, dalam kasus ini.