2016-06-21 4 views
1

맞춤 플롯을 만들고 싶습니다. 각 개체의 색을 정확하게 지정하고 싶습니다. 특히, 나는 시스템 이벤트를위한 Gantt 차트를 만들고있다. 이러한 이벤트를 그룹으로 분류하고 시각화하기 위해 색상을 코딩합니다. 내가 처음 반투명 회색 모든 색상을 설정하고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 값 (즉, 투명도 포함)을 지정할 수 있기를 원합니다. 누군가 이렇게하는 방법을 공유 할 수 있습니까? 저는 투명성을 포함하여 각 라인을 정확하게 칠할 수있는 한 다른 방법으로 이것을 할 수 있습니다. 질문에 대한

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'를 사용하는 것과 같이 배열 된 방법을 찾고있었습니다. 이것은 단지 하나의 세포의 특별한 경우에 불과했습니다. 일반적으로 모든 셀을 포함 할 수 있습니다. 그래서 배열 된 메소드를 찾고 있습니다. 그 말은 당신의 제안이 효과가 있다고 말했습니다. 다른 사람이보고있는 경우 질문을 업데이 트합니다 :) –

관련 문제