我正在Seaborn中绘制热图。问题是我的情节中有太多的正方形,所以x和y标签彼此太靠近才有用。所以我正在创建一个xticks和yticks列表来使用。但是,将此列表传递给函数会旋转图中的标签。让seaborn自动掉落一些蜱虫真的很不错,但是我希望能够让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)
答案 0 :(得分:66)
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()
答案 1 :(得分:19)
您还可以调用heatmap对象的方法:
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。