更改Seaborn热图中刻度标签的旋转

Art*_*örk 45 python heatmap seaborn

我正在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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Ffi*_*ydd 73

seabornmatplotlib内部使用,因此您可以使用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()
Run Code Online (Sandbox Code Playgroud)

情节

  • 所以真正唯一需要的部分是`plt.yticks(rotation = 0)` (18认同)
  • @Tom是的.剩下的代码就在那里,OP(或其他任何人)可以复制一个完全正常的情节.我评论了它不同的具体部分以及它的不同之处. (5认同)

Rys*_*ski 21

你也可以调用heatmap对象的方法:

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

我不知道为什么这不在sns.heatmap的文档中,但是这里描述了相同的方法:http://seaborn.pydata.org/generated/seaborn.FacetGrid.html

我相信这些方法可用于每个seaborn plot对象,但无法找到一般的API.

  • 我想如果你用 matplotlib 表示法一致地调用对象会变得更加明显,即 `ax=sns.heatmap(..); ax.set_yticklabels()`。那么在 matplotlib 文档中找到解决方案可能会更清楚。 (2认同)