75

我正在 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)

在此处输入图像描述

4

2 回答 2

107

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()

阴谋

于 2014-11-20T10:36:18.890 回答
42

也可以调用 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。

于 2017-06-06T14:04:55.397 回答