【问题标题】:How to sort a heatmap to show highest correlations together?如何对热图进行排序以显示最高相关性?
【发布时间】:2021-01-03 04:43:58
【问题描述】:

我正在尝试创建一个热图来显示客户使用报告的次数之间的关系,使用计数列作为热图中的值客户可以根据需要多次使用多个模板。我的数据框看起来像这样(原始数据框有 638 行,出于隐私目的,我创建了虚拟数据来隐藏原始数据):

print(df)

     Customer     Report         Count
1    XIAA         Report_A       198
2    XIAA         Report_C       1
3    BKAN         Bespoke        65
4    JAJS         Report_A       3
5    HNUA         Report_F       436
6    NOAO         Bespoke        12
7    RQNJ         Report_G       53
8    MJAS         Report_A       9
9    PGBC         Report_Y       155

为了绘制热图,我使用了以下函数:

heatmap1_data = pd.pivot_table(df, values='Count', 
                     index=['Customer'], 
                     columns='Report')
plt.subplots(figsize=(25, 30))
sns.heatmap(heatmap1_data, cmap="Blues",vmin=0, vmax=2)

我的热图是这样返回的(出于隐私目的,我已在轴中裁剪了名称):

由于我的数据框中计数的变化,热图看起来过于分离,这导致数据透视表有许多“0”值来显示某些客户未使用哪些报告。有没有办法对此进行排序,以便在热图中同时显示最高的相关性,而不是非常分开?

【问题讨论】:

  • 对于您已删除的问题,更新标题:g = sns.catplot(..., col='Parent?'); for col_name, ax in g.axes_dict.items(): ax.set_title(col_name)

标签: python pandas seaborn jupyter heatmap


【解决方案1】:

试试这个。

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

plt.figure(figsize=(6,6))
sns.heatmap(df[['heatmap1_data']].sort_values(by=['Report'],ascending=False),
            vmin=-1,
            cmap='coolwarm',
            annot=True)

有关所有详细信息,请参阅下面的链接。

https://medium.com/@chrisshaw982/seaborn-correlation-heatmaps-customized-10246f4f7f4b

【讨论】:

  • 我试过这个但是得到错误:KeyError:“['heatmap1_data'] 不在索引中”。此代码是否适用于数据透视表?
  • 好的,名为“df”的对象是您的数据框。我觉得你在那里很好。名为“heatmap1_data”的对象是您要排序的字段名称。最后,名为“报告”的对象可以与您正在排序的字段相同。试试这样:sns.heatmap(df[['field1']].sort_values(by=['field1'],ascending=False), vmin=-1, cmap='coolwarm', annot=True)跨度>
猜你喜欢
  • 2014-04-07
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 2018-04-10
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 2016-05-20
相关资源
最近更新 更多