[解決済み] matplotlib のカラーサイクルの状態を取得する
質問
matplotlibのカラーサイクルの現在の状態を問い合わせることは可能ですか?言い換えれば、関数
get_cycle_state
という関数がありますか?
>>> plot(x1, y1)
>>> plot(x2, y2)
>>> state = get_cycle_state()
>>> print state
2
ここで、私は状態がプロットで使用される次の色のインデックスであることを期待します。代わりに、それが次の色(上の例では、デフォルトのサイクルのための"r")を返した場合、それも良いでしょう。
どのように解決するのですか?
色サイクルイテレータにアクセスする
基本となるイテレータにアクセスするための "user-facing" (すなわち "public") メソッドはありませんが、(慣習により) "private" メソッドを通じてアクセスすることができます。 しかし、この方法では
iterator
の状態を変更することなく取得することはできません。
カラーサイクルの設定
簡単な余談です。色とプロパティのサイクルは様々な方法で設定することができます(例えば
ax.set_color_cycle
をバージョン <1.5 で使用したり
ax.set_prop_cycler
を使用することができます。) を見てみてください。
の例を見てください。
または
以前のスタイルはこちら
.
基礎となるイテレータにアクセスする
しかし、イテレートにアクセスするためのパブリックなメソッドはありませんが、与えられた軸オブジェクト(
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 では、これは次のように変更されました。
を使うようになりました。
cycler
ライブラリ
と呼ばれるもので、イテラブルは
prop_cycler
ではなく
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
しかし、このオブジェクトは "bare".の状態です。
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()
<イグ
これが唯一の方法というわけではありませんが、この場合、事前にプロットされた線の色を取得しようとするよりもきれいな方法です。
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み】Matplotlibで図のタイトルと軸ラベルのフォントサイズを設定するには?
-
[解決済み] matplotlib のプロットでフォントサイズを変更する方法
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法