カラー サイクル イテレータへのアクセス
基礎となる反復子にアクセスするための「ユーザー向け」(別名「パブリック」) メソッドはありませんが、「プライベート」(慣例により) メソッドを介してアクセスできます。ただし、変更せずに の状態を取得することはできませんiterator
。
カラーサイクルの設定
余談ですが、さまざまな方法で色/プロパティ サイクルを設定できます (たとえばax.set_color_cycle
、バージョン <1.5 またはax.set_prop_cycler
>=1.5)。バージョン 1.5 以降についてはこちらの例、または以前のスタイルについてはこちらをご覧ください。
基礎となる反復子へのアクセス
ただし、 iterable にアクセスする公開メソッドはありませんが、ヘルパー クラス インスタンス ax
を介して特定の軸オブジェクト ( )にアクセスできます。やや紛らわしい名前ですが、呼び出される可能性のある奇妙でさまざまな方法のすべてをコマンドが処理できるようにするのは、舞台裏の機構です。とりわけ、どの色を自動的に割り当てるかを追跡します。同様に、デフォルトの塗りつぶしの色とパッチのプロパティの循環を制御する必要があります。_get_lines
ax._get_lines
plot
plot
ax._get_patches_for_fill
いずれにせよ、反復可能なカラー サイクルはax._get_lines.color_cycle
ラインとax._get_patches_for_fill.color_cycle
パッチ用です。matplotlib >=1.5 では、これはlibraryを使用するようcycler
prop_cycler
に変更され、代わりにiterable が呼び出され、色だけではなく of プロパティcolor_cycle
が生成されます。dict
全体として、次のようにします。
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
color_cycle = ax._get_lines.color_cycle
# or ax._get_lines.prop_cycler on version >= 1.5
# Note that prop_cycler cycles over dicts, so you'll want next(cycle)['color']
の状態を表示することはできませんiterator
ただし、このオブジェクトは「裸」iterator
です。次のアイテムを簡単に取得できます (たとえば、これは、その後next_color = next(color_cycle)
の次の色がプロットされることを意味します。設計上、イテレータの現在の状態を変更せずに取得する方法はありません。
以上の場合、現在の状態を推測できるため、使用されているオブジェクトv1.5
を取得すると便利です。cycler
ただし、cycler
オブジェクト自体は (公開または非公開で) どこからでもアクセスできません。代わりに、オブジェクトitertools.cycle
から作成されたインスタンスのみにアクセスできます。cycler
いずれにせよ、カラー/プロパティ サイクラーの基本的な状態に到達する方法はありません。
代わりに、以前にプロットされたアイテムの色を一致させます
あなたの場合、ちょうどプロットされたものの色を一致させたいと思っているようです。色/プロパティがどうなるかを決定しようとする代わりに、プロットされたもののプロパティに基づいて新しいアイテムの色/その他を設定します。
たとえば、あなたが説明した場合、私は次のようにします:
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()

これが唯一の方法ではありませんが、この場合、事前にプロットされた線の色を取得しようとするよりもクリーンです。