2016-06-21 3 views
1

私はカスタムプロットを作成したいと思います。私は各オブジェクトの色を正確に指定したいと思います。具体的には、システムイベントのガントチャートを作成しています。私はこれらのイベントをグループに分け、色分けして視覚化しています。私は最初の半透明のグレーであることを、すべての色を設定していますmatplotlibで個別に色を設定する

import matplotlib.pyplot as plt 
import pandas as pd 

df = pd.DataFrame() 
df['y'] = [0,4,5,6,10] 
df['color'] = [(.5, .5, .5, .5),]*len(df) 
print df['color'] 

#fig = plt.figure(figsize=(12, 6)) 
#vax = fig.add_subplot(1,1,1) 
#vax.hlines(df['y'], 0, 10, colors=df['color']) 
#fig.savefig('ok.png') 

only_four = df['y']==4 
df['color'][only_four] = [(0.7, 0.6, 0.5, 0.4),]*sum(only_four) 
print df['color'] 

注:

は、次のコードを考えてみてください。後で、特定の値のセットについて、色を変更したいと思います。私はこのカラーテーブルで終わります。

0 (0.5, 0.5, 0.5, 0.5) 
1      0.6 
2 (0.5, 0.5, 0.5, 0.5) 
3 (0.5, 0.5, 0.5, 0.5) 
4 (0.5, 0.5, 0.5, 0.5) 

hlinesの任意のサブセットについて、RGBA値(透過度を含む)を指定できるようにします。誰かがこれを行う方法を共有することができますか?透明性を含めて各ラインを正確に色付けすることができる限り、私はこれを行うための他の方法には開放されています。 QUESTION TO

ADDITION: は、私はのように繰り返すことによって、複数の行を更新することができる午前:

def set_color(df, row_bool, r, g, b, a=1.0): 
    idx = np.where(row_bool)[0] 
    for i in idx: 
     df['color'][i] = (r,g,b,a) 
    return 

これで十分ですが、私は本当に(私がすなわち明示的なループ)ベクトル演算を望んでいました。

答えて

0

私は、更新されたタプルをDataFrameに入力することができず、DataFrameの0.6の値しか取得できないということを推測しています。 DataFrame.set_valueを試しましたか?

In [1]: df 
Out[1]: 
    y     color 
0 0 (0.5, 0.5, 0.5, 0.5) 
1 4     0.6 
2 5 (0.5, 0.5, 0.5, 0.5) 
3 6 (0.5, 0.5, 0.5, 0.5) 
4 10 (0.5, 0.5, 0.5, 0.5) 

In [2]: df.set_value(1, 'color', (0.7, 0.6, 0.5, 0.4)) 
Out[2]: 
    y     color 
0 0 (0.5, 0.5, 0.5, 0.5) 
1 4 (0.7, 0.6, 0.5, 0.4) 
2 5 (0.5, 0.5, 0.5, 0.5) 
3 6 (0.5, 0.5, 0.5, 0.5) 
4 10 (0.5, 0.5, 0.5, 0.5) 
+0

ありがとうございます。私はあなたの答えを受け入れるつもりです。私は実際には 'only_four'の私の使用のように配列を行う方法を探していた。これは1つのセルの特殊なケースでした。一般に、任意の数の細胞を含むことができる。だから、私は配列されたメソッドを探しています。それはあなたの提案が働いたと言いました。誰かが見ている場合に私は質問を更新する:) –

関連する問題