Matplotlibでカラーサイクルをリセットする



Reset Color Cycle Matplotlib



解決:

Axes.set_color_cycleを使用して、カラーサイクルを元の色にリセットできます。このためのコードを見ると、実際の作業を行うための関数があります。

def set_color_cycle(self、clist = None):clistがNoneの場合:clist = rcParams ['axes.color_cycle'] self.color_cycle = itertools.cycle(clist

そしてそれを使用するAxesのメソッド:



def set_color_cycle(self、clist): '' 'この軸の将来のプロットコマンドのカラーサイクルを設定します。 * clist *は、mpl色指定子のリストです。 '' 'self._get_lines.set_color_cycle(clist)self._get_patches_for_fill.set_color_cycle(clist)

これは基本的に、Noneを唯一の引数としてset_color_cycleを呼び出すことができ、rcParams ['axes.color_cycle']にあるデフォルトのサイクルに置き換えられることを意味します。

次のコードでこれを試したところ、期待どおりの結果が得られました。



import matplotlib.pyplot as plt import numpy as np for i in range(3):plt.plot(np.arange(10)+ i)#for Matplotlib version = 1.5 plt.gca()。set_prop_cycle(None)for i in range(3):plt.plot(np.arange(10、1、-1)+ i)plt.show()

カラーサイクリングリセット機能を示すコード出力


@pelsonによって与えられた答えが使用するようにset_color_cycleであり、これはMatplotlib 1.5で非推奨になりました。私は、彼のソリューションの更新バージョンを使用しておくと便利だと思いました。set_prop_cycle:

import matplotlib.pyplot as plt import numpy as np for i in range(3):plt.plot(np.arange(10)+ i)plt.gca()。set_prop_cycle(None)for i in range(3):plt .plot(np.arange(10、0、-1)+ i)plt.show()

私は変更しなければならなかったことにも注意してください例:arange(10,1、-1)tonp.arange(10,0、-1)。前者は、9つの要素のみの配列を提供しました。これはおそらく、異なるNumpyバージョンを使用することから発生します。鉱山は1.10.2です。



編集 :使用する必要がなくなりましたrcParams。コメントでそれを指摘してくれた@divenexに感謝します。


Seabornを使用しているとおっしゃっていたので、私がお勧めするのは次のとおりです。

sns.color_palette(n_colors = 3)の場合:ax.plot(...)ax.plot(...)

これにより、現在アクティブなカラーサイクルを使用するようにカラーパレットが設定されますが、最初の3色のみが使用されます。また、一時的なカラーサイクルを設定したいときのための汎用ソリューションでもあります。

実際に下にある必要があるのはブロック付きは、作成するために行っていることです。軸オブジェクト(つまり、plt.subplots、fig.add_subplot()など)。これは、matplotlibのカラーサイクル自体がどのように機能するかによるものです。

特に必要なこと、つまりカラーサイクルを「リセット」することは可能ですが、それはハックであり、どのような種類のプロダクションコードでも実行しません。ただし、これがどのように発生する可能性があるかを示します。

f、ax = plt.subplots()ax.plot(np.random.randn(10、3))ax._get_lines.color_cycle = itertools.cycle(sns.color_palette())ax.plot(np.random.randn( 10、3)、lw = 5、alpha = .25)

ここに画像の説明を入力してください