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 iterator
tanpa mengubahnya.
Mengatur siklus warna
Singkatnya: Anda dapat menyetel siklus warna / properti dalam berbagai cara (misalnya ax.set_color_cycle
dalam versi <1.5 atau ax.set_prop_cycler
di> = 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_lines
instance kelas helper. ax._get_lines
adalah sentuhan dengan nama yang membingungkan, tetapi mesin di belakang layarlah yang memungkinkan plot
perintah untuk memproses semua cara aneh dan beragam yang plot
dapat dipanggil. Antara lain, itulah yang melacak warna apa yang akan ditetapkan secara otomatis. Demikian pula, ada ax._get_patches_for_fill
untuk mengontrol perputaran melalui warna isian default dan properti tambalan.
Bagaimanapun, siklus warna yang dapat diulang ax._get_lines.color_cycle
untuk garis dan ax._get_patches_for_fill.color_cycle
untuk tambalan. Pada matplotlib> = 1.5, ini telah diubah untuk menggunakan cycler
perpustakaan , dan iterable dipanggil prop_cycler
sebagai ganti color_cycle
dan menghasilkan dict
properti 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.5
atau lebih besar, alangkah baiknya untuk mendapatkan cycler
objek yang digunakan, karena kita bisa menyimpulkan keadaannya saat ini. Namun, cycler
objek itu sendiri tidak dapat diakses (secara publik atau pribadi) di mana pun. Sebaliknya, hanya itertools.cycle
instance yang dibuat dari cycler
objek 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.