2017-11-14 11 views
2

seaborn.clustermapのytickラベルの色を変更することはできますか?seaborn.clustermapのytickラベルの色を変更します

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プロット行との間の対応と行ラベルを取得することが可能である:

だからseaborn Iris exampleのために、種に基づいて行の色を設定し、clustermapをプロットすることが可能です。

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

あなたは、樹状図の色のいくつかの「ミスマッチ」と(実施例97および114のための)y軸目盛ラベルに気づくであろう、これは、図の大きさによるものです。 figsizeを使用してサイズを増やすと、隠しティックを明らかにすることができます。 enter image description here