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 iterator
değ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 ax
aracılığıyla belirli bir eksen nesnesi ( ) için ona erişebilirsiniz _get_lines
. ax._get_lines
kafa karıştırıcı bir şekilde adlandırılmış bir dokunuş, ancak plot
komutun 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_fill
varsayı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_cycle
yamalar içindir. Matplotlib> = 1.5'te, bu kitaplığı kullanmak içincycler
değiştirildi ve yinelenebilir prop_cycler
yerine çağrılır color_cycle
ve dict
yalnı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.5
veya daha fazlası, cycler
mevcut durumunu çıkarabildiğimiz için kullanılan nesneyi elde etmek güzel olurdu . Ancak, cycler
nesnenin kendisine hiçbir yerden erişilemez (genel veya özel olarak). Bunun yerine, yalnızca nesneden itertools.cycle
oluşturulan örneğe cycler
eriş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.