2017-09-11 7 views
1

カスタムカラーサイクラーをテキストファイルに定義し、それをplt.style.context()経由で呼び出しています。私が定義したサイクルは12色です。プロットに注釈を付けるときに、カラー文字列を使用してカスタムサイクラーの色にアクセスしようとすると'C0'から'C9'までは'C10'がスローされますValueError: Invalid RGBA argument: 'C10'です。すべての12の値は間違いなくそこにあります。カスタムprop_cycleの色にアクセスするには?

axes.prop_cycle : cycler('color', ['332288', 'CC6677', 'DDCC77', '117733', '88CCEE', 'AA4499', '44AA99', '999933', '882255', '661100', '6699CC', 'AA4466']) 

テストスクリプト:スタイルファイルstyle.yamlの内容

import numpy as np 
import matplotlib.pyplot as plt 
data = np.c_[np.zeros(13), np.arange(13)].T 
labels = list('abcdefghijklm') 

with plt.style.context('style.yaml'): 
    # just to prove that the colors are loading correctly: 
    cycle = plt.rcParams['axes.prop_cycle'].by_key()['color'] 
    print('{} colors: {}'.format(len(cycle), cycle)) 
    # now the actual plotting: 
    fig, ax = plt.subplots() 
    ax.plot(data) 
    for ix in range(data.shape[1]): 
     ax.text(x=1, y=data[1, ix], s=labels[ix], color='C{}'.format(ix)) 

結果行は私のカスタムサイクラーの色に従うということですが、テキスト(10枚のラベルの後にプロットし、それを停止ValueErrorにもかかわらず)ラベルはmatplotlibのデフォルトサイクラーの色を使用します(スクリーンショット参照)。外部のYAMLファイルで定義されたカスタムサイクラーの色を使ってテキストを表示させるにはどうすればよいですか?

screenshot of example plot

答えて

2

まず、あなただけの"CN" -notation経由colorcycleの最初の10色にアクセスすることができます。 matplotlibのstates itとして:

Nは値0-9をとる色「CN」の表記を循環性の外これらの色にアクセスするには、軸 '[mpl.rcParamsに最初の10色を表すために添加しました.prop_cycle ']

第2に、CNの値はスタイルコンテキスト内で更新されないため、このような場合には使用できません。

ただし、もちろん直接サイクラーから色を使用することができます。
(。私はここに質問のYAMLの一部を無視してることに注意してください)

import numpy as np 
import matplotlib.pyplot as plt 
from cycler import cycler 
data = np.c_[np.zeros(13), np.arange(13)].T 
labels = list('abcdefghijklm') 

plt.rcParams["axes.prop_cycle"] = cycler('color', 
        ['#332288', '#CC6677', '#DDCC77', '#117733', '#88CCEE', '#AA4499', 
        '#44AA99', '#999933', '#882255', '#661100', '#6699CC', '#AA4466']) 

cycle = plt.rcParams['axes.prop_cycle'].by_key()['color'] 

fig, ax = plt.subplots() 
ax.plot(data) 
for ix in range(data.shape[1]): 
    ax.text(x=1, y=data[1, ix], s=labels[ix], color=cycle[ix%len(cycle)]) 

plt.show() 

異なる方法がサイクルであることができます

012:

import numpy as np 
import matplotlib.pyplot as plt 
from cycler import cycler 

data = np.c_[np.zeros(13), np.arange(13)].T 
labels = list('abcdefghijklm') 

plt.rcParams["axes.prop_cycle"] = cycler('color', 
        ['#332288', '#CC6677', '#DDCC77', '#117733', '#88CCEE', '#AA4499', 
        '#44AA99', '#999933', '#882255', '#661100', '#6699CC', '#AA4466']) 


fig, ax = plt.subplots() 
ax.plot(data) 

ax.set_prop_cycle(None) 
cycler = ax._get_lines.prop_cycler 
plt.gca().set_prop_cycle(None) 
for ix in range(data.shape[1]): 
    ax.text(x=1, y=data[1, ix], s=labels[ix], color=next(cycler)['color']) 

plt.show() 

両方のコードは次のプロットを生成する:nextとサイクラースルー

+0

ありがとう;私は 'Cn'表記のドキュメントについて(間違った場所で)(http://matplotlib.org/cycler/)探していました。 – drammock

関連する問題