首页 > 解决方案 > sns.clustermap 记号丢失

问题描述

我正在尝试可视化 CNN 文本分类模型中正在学习的过滤器。为此,我在卷积层之后提取了文本样本的特征图,对于大小为 3 的过滤器,我得到了 (filter_num)*(length_of_sentences) 大小的张量。

df = pd.DataFrame(-np.random.randn(50,50), index = range(50), columns= range(50))
g= sns.clustermap(df,row_cluster=True,col_cluster=False)
plt.setp(g.ax_heatmap.yaxis.get_majorticklabels(), rotation=0) # ytick rotate
g.cax.remove() # remove colorbar
plt.show()

此代码导致:

热图

我看不到 y 轴上的所有刻度。这是必要的,因为我需要查看哪些过滤器了解哪些信息。有什么方法可以正确显示 y 轴上的所有刻度?

标签: matplotlibseaborn

解决方案


kwargssns.clustermapget 传递到sns.heatmap,它有一个选项yticklabels,其文档状态(强调我的):

如果为 True,则绘制数据框的列名。如果为 False,则不要绘制列名。如果类似列表,则将这些备用标签绘制为 xticklabels。如果是整数,请使用列名,但仅绘制每个 n label。如果“自动”,请尝试密集绘制不重叠的标签。

在这里,最简单的选项是将其设置为整数,这样它就会绘制每个n标签。我们想要每个标签,所以我们想将它设置为1,即:

g = sns.clustermap(df, row_cluster=True, col_cluster=False, yticklabels=1)

在您的完整示例中:

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

df = pd.DataFrame(-np.random.randn(50,50), index=range(50), columns=range(50))
g = sns.clustermap(df, row_cluster=True, col_cluster=False, yticklabels=1)
plt.setp(g.ax_heatmap.yaxis.get_majorticklabels(), rotation=0)  # ytick rotate
g.cax.remove()  # remove colorbar

plt.show()

在此处输入图像描述


推荐阅读