在 Seaborn 中将相关矩阵绘制为热图时,是不是可以删除重复的列/行?

Posted

技术标签:

【中文标题】在 Seaborn 中将相关矩阵绘制为热图时,是不是可以删除重复的列/行?【英文标题】:Is it possible to remove repeated columns/rows when plotting correlation matrix as heatmap in Seaborn?在 Seaborn 中将相关矩阵绘制为热图时,是否可以删除重复的列/行? 【发布时间】:2020-02-19 10:11:40 【问题描述】:

给定下一个数据帧

my_df.head()



cruce1  cruce2  cruce3  cruce4  cruce5  cruce6  cruce7  cruce8  cruce9  cruce10 ... factor75    factor80    factor85    factor90    factor95    factor100   factor105   factor110   factor115   factor120
Date                                                                                    
1993-10-28  0.0049  NaN NaN NaN NaN NaN NaN NaN NaN NaN ... 161.75  172.45  196.86  200.33  219.21  222.67  243.23  235.77  249.48  231.56
1993-10-29  0.0002  0.0051  NaN NaN NaN NaN NaN NaN NaN NaN ... 169.13  172.64  211.90  205.58  218.63  223.16  250.21  245.71  256.47  245.63
1993-11-01  0.0041  0.0043  0.0092  NaN NaN NaN NaN NaN NaN NaN ... 165.37  170.35  215.84  198.81  216.43  222.32  246.18  247.09  253.57  254.07
1993-11-02  -0.0019 0.0022  0.0024  0.0073  NaN NaN NaN NaN NaN NaN ... 175.01  180.37  219.77  210.89  210.06  236.31  249.19  260.01  252.05  259.16
1993-11-03  0.0023  0.0004  0.0045  0.0047  0.0096  NaN NaN NaN NaN NaN ... 183.84  177.68  210.58  207.35  207.67  228.06  235.10  254.71  251.55  258.43

使用此列:

my_df.head()

Index(['cruce1', 'cruce2', 'cruce3', 'cruce4', 'cruce5', 'cruce6', 'cruce7',
       'cruce8', 'cruce9', 'cruce10', 'cruce11', 'cruce12', 'cruce13',
       'cruce14', 'cruce15', 'cruce16', 'cruce17', 'cruce18', 'cruce19',
       'cruce20', 'factor1', 'factor5', 'factor10', 'factor15', 'factor20',
       'factor25', 'factor30', 'factor35', 'factor40', 'factor45', 'factor50',
       'factor55', 'factor60', 'factor65', 'factor70', 'factor75', 'factor80',
       'factor85', 'factor90', 'factor95', 'factor100', 'factor105',
       'factor110', 'factor115', 'factor120'],
      dtype='object')

我制作了相关矩阵的热图

corr = my_df.diff().corr()

mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True

sns.heatmap(corr, mask=mask, linewidths=0.1, vmax=1.0, 
                    square=False, cmap=colormap, linecolor='white')

下一个结果:

热图 1:

但我只想保留热图中的不同列:

热图 2:

有可能吗?而且,如果是的话,是否可以通过使生成的正方形填充空白空间来完成?

【问题讨论】:

【参考方案1】:

我解决了。

我不得不改变

corr = my_df.diff().corr()

收件人:

corr = df.diff().corr().filter(regex = 'cruce', axis=1).filter(regex = 'factor', axis=0)

线

filter(regex = 'cruce', axis=1)

用于从轴 1(逐行)中删除所有包含 'cruce' 的列,而行

filter(regex = 'factor', axis=0)

从轴 0 中删除所有包含“因子”的列(按列)。

更多内容在pandas doc

然后,移除掩码设置:

sns.heatmap(corr, linewidths=0.1, vmax=1.0, square=False, cmap=colormap, linecolor='white')

我们得到下一个结果: Solution

【讨论】:

您可以通过为以下部分.filter(regex = 'cruce', axis=1).filter(regex = 'factor', axis=0) 提供解释或至少提供文档链接来大大改进您的答案。 完成。现在,有了更好的解释。

以上是关于在 Seaborn 中将相关矩阵绘制为热图时,是不是可以删除重复的列/行?的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn 热图相关性不适合注释数字

如何为 seaborn 的热图或相关矩阵设置动画?

重叠 yticklabels:是不是可以控制 seaborn 中热图的单元格大小?

根据 Seaborn 中的散点图绘制热图

使用seaborn在python中绘制3列的热图

带有日期时间轴的 Seaborn 热图