web-dev-qa-db-ja.com

Seabornヒートマップの目盛りラベルの回転を変更する

Seabornでヒートマップをプロットしています。問題は、プロット内の正方形が多すぎるため、xラベルとyラベルが近すぎて役に立たないことです。そこで、使用するxticksとyticksのリストを作成しています。ただし、このリストを関数に渡すと、プロット内のラベルが回転します。シーボーンが自動的にいくつかのダニを落とすのは本当に素晴らしいことですが、イティックを真っ直ぐにしたいということを除けば。

import pandas as pd
import numpy as np
import seaborn as sns

data = pd.DataFrame(np.random.normal(size=40*40).reshape(40,40))

yticks = data.index
keptticks = yticks[::int(len(yticks)/10)]
yticks = ['' for y in yticks]
yticks[::int(len(yticks)/10)] = keptticks

xticks = data.columns
keptticks = xticks[::int(len(xticks)/10)]
xticks = ['' for y in xticks]
xticks[::int(len(xticks)/10)] = keptticks

sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks)

enter image description here

44
Artturi Björk

seabornは内部でmatplotlibを使用するため、matplotlib関数を使用してプロットを変更できます。以下のコードを修正して、 plt.yticks 関数を使用してrotation=0を設定し、問題を修正しました。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns


data = pd.DataFrame(np.random.normal(size=40*40).reshape(40,40))

yticks = data.index
keptticks = yticks[::int(len(yticks)/10)]
yticks = ['' for y in yticks]
yticks[::int(len(yticks)/10)] = keptticks

xticks = data.columns
keptticks = xticks[::int(len(xticks)/10)]
xticks = ['' for y in xticks]
xticks[::int(len(xticks)/10)] = keptticks

sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks)

# This sets the yticks "upright" with 0, as opposed to sideways with 90.
plt.yticks(rotation=0) 

plt.show()

Plot

68
Ffisegydd

ヒートマップオブジェクトのメソッドを呼び出すこともできます。

    g = sns.heatmap(data,linewidth=0,yticklabels=yticks,xticklabels=xticks)
    g.set_yticklabels(g.get_yticklabels(), rotation = 0, fontsize = 8)

これがsns.heatmapのドキュメントにない理由はわかりませんが、同じメソッドがここで説明されています: http://seaborn.pydata.org/generated/seaborn.FacetGrid.html

これらのメソッドは、すべてのseabornプロットオブジェクトで使用できますが、そのための一般的なAPIは見つかりませんでした。

21