Renk döngüsü yineleyicisine erişim
Temel yineleyiciye erişmek için "kullanıcıya dönük" ("genel" olarak da bilinen) bir yöntem yoktur, ancak buna "özel" (geleneksel) yöntemlerle erişebilirsiniz. Ancak, bir durumunu iteratordeğiştirmeden elde edemezsiniz .
Renk döngüsünü ayarlama
Hızlı kenara: Renk / özellik döngüsünü çeşitli şekillerde ayarlayabilirsiniz (örn ax.set_color_cycle. <1.5 veya ax.set_prop_cycler> = 1.5 sürümlerinde ). 1.5 veya üstü sürüm için buradaki örneğe veya buradan önceki stile bir göz atın .
Temel yineleyiciye erişim
Bununla birlikte, yinelenebilir öğeye erişmek için halka açık bir yöntem olmasa da, yardımcı sınıf örneği axaracılığıyla belirli bir eksen nesnesi ( ) için ona erişebilirsiniz _get_lines. ax._get_lineskafa karıştırıcı bir şekilde adlandırılmış bir dokunuş, ancak plotkomutun plotçağrılabilecek tüm garip ve çeşitli yolları işlemesine izin veren perde arkası mekanizması . Diğer şeylerin yanı sıra, hangi renklerin otomatik olarak atanacağını takip eden şeydir. Benzer şekilde, ax._get_patches_for_fillvarsayılan dolgu renkleri ve yama özellikleri arasında geçişi kontrol etmek için var .
Her halükarda, yinelenebilir renk döngüsü ax._get_lines.color_cycleçizgiler ve ax._get_patches_for_fill.color_cycleyamalar içindir. Matplotlib> = 1.5'te, bu kitaplığı kullanmak içincycler değiştirildi ve yinelenebilir prop_cycleryerine çağrılır color_cycleve dictyalnızca bir renk yerine a of özellikleri verir .
Sonuç olarak, şöyle bir şey yaparsınız:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
color_cycle = ax._get_lines.color_cycle
Bir durumunu göremezsin iterator
Ancak bu nesne "çıplak" tır iterator. Biz kolayca sonraki öğeyi (örneğin alabilirsiniz next_color = next(color_cycle), ancak sonraki renk o araçlar bundan sonra çizilen olacak budur. Tasarım gereği, bunu değiştirmeden bir yineleyici mevcut durumunu almak için bir yolu yoktur.
İçinde v1.5veya daha fazlası, cyclermevcut durumunu çıkarabildiğimiz için kullanılan nesneyi elde etmek güzel olurdu . Ancak, cyclernesnenin kendisine hiçbir yerden erişilemez (genel veya özel olarak). Bunun yerine, yalnızca nesneden itertools.cycleoluşturulan örneğe cyclererişilebilir. Her iki durumda da, renk / özellik döngüleyicisinin temel durumuna ulaşmanın bir yolu yoktur.
Bunun yerine önceden çizilen öğenin rengini eşleştirin
Sizin durumunuzda, az önce çizilen bir şeyin rengiyle eşleştirmek istiyormuşsunuz gibi geliyor. Rengin / özelliğin ne olacağını belirlemeye çalışmak yerine, çizilen öğenin özelliklerine göre yeni öğenizin rengini / vb. Ayarlayın.
Örneğin, açıkladığınız durumda, şöyle bir şey yapacağım:
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()

Tek yol bu değil, ama bu durumda çizilen çizginin rengini önceden elde etmeye çalışmaktan daha temiz.