2017-11-14 2 views
2

seaborn.clustermap에서 ytick 레이블의 색을 변경할 수 있습니까?seaborn.clustermap에서 ytick 레이블의 색 변경

그래서 seaborn Iris example를 들어, 종에 따라 행 색상을 설정하고 clustermap 플롯 할 수 있습니다 :

import seaborn as sns 
iris = sns.load_dataset("iris") 
species = iris.pop("species") 
lut = dict(zip(species.unique(), "rbg")) 
row_colors = species.map(lut) 
g = sns.clustermap(iris) 

을 그리고 플롯 행과 행 레이블 사이에 1-1 대응을 얻을 수 있습니다 :

g.ax_heatmap.yaxis.get_majorticklabels() 

어쨌든 row_colors를 기반으로 ytick 레이블을 다시 칠하는 데 사용합니까?

답변

0

똑같은 것을 시도하는 동안이 질문을 발견했습니다. this answer을 @tom으로 쳐다 보니 틱 레이블을 사용자 정의 할 수있게되었습니다.

틱 레이블의 텍스트를 다시 색상 사전에 매핑하여 개별 틱의 색상을 지정해야합니다.

각 틱에 액세스하려면 g.ax_heatmap.axes.get_yticklabels()으로 이동하고 get_text()을 사용하여 틱의 텍스트를 추출하십시오. 홍채의 특정 예에서

틱 레이블 텍스트를 데이터 셋 팬더 시리즈 species의 인덱스는, 당신은 당신이 int 다시 인덱스를 변환하는 데 필요한 lut 사전에서 색상을 복구 할 수 있습니다 species 텍스트를 수집합니다 .loc을 사용하여 필요한 정보를 추출하십시오.

iris = sns.load_dataset("iris") 
species = iris.pop("species") 
lut = dict(zip(species.unique(), "rbg")) 
row_colors = species.map(lut) 
g = sns.clustermap(iris, row_colors=row_colors) 

for tick_label in g.ax_heatmap.axes.get_yticklabels(): 
    tick_text = tick_label.get_text() 
    species_name = species.loc[int(tick_text)] 
    tick_label.set_color(lut[species_name]) 

Iris dataset clustermap with colored ticks in the y axis

당신은 Dendrogram이 (예 97 및 114), Y 축 눈금 라벨의 색상에 약간의 "불일치"알,이 도면의 크기에 기인한다. figsize을 사용하여 크기를 늘리면 숨겨진 틱을 발견 할 수 있습니다. enter image description here