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

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

たとえば、3 つの取引戦略についてのデータがあり、それぞれ取引コストありとなしがあるとします。6 つのバリエーション (3 つの戦略 * 2 つの取引コスト) のそれぞれの時系列を同じ軸にプロットします。「取引コストあり」の線は と でプロットしalpha=1、 「取引コストなし」の線はとlinewidth=1でプロットします。ただし、各戦略の両方のバージョンの色は同じにしたいと思います。alpha=0.25linewidth=5

次のようなものを希望します:

fig, ax = plt.subplots(1, 1, figsize=(10, 10))

for c in with_transaction_frame.columns:
    ax.plot(with_transaction_frame[c], label=c, alpha=1, linewidth=1)

****SOME MAGIC GOES HERE TO RESET THE COLOR CYCLE

for c in no_transaction_frame.columns:
    ax.plot(no_transaction_frame[c], label=c, alpha=0.25, linewidth=5)

ax.legend()

2 番目のループが呼び出されたときにカラー サイクルを「最初に戻る」ようにリセットするには、指定された行に配置する適切なコードは何ですか。

ベストアンサー1

カラーサイクルを元の状態に戻すにはAxes.set_color_cycleこのコードを見ると、実際の作業を行う関数があります。

def set_color_cycle(self, clist=None):
    if clist is None:
        clist = rcParams['axes.color_cycle']
    self.color_cycle = itertools.cycle(clist

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

def set_color_cycle(self, clist):
    """
    Set the color cycle for any future plot commands on this Axes.

    *clist* is a list of mpl color specifiers.
    """
    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_color_cycle(None)
# 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()

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

おすすめ記事