【问题标题】:Heatmap to visualize percentage of values热图以可视化值的百分比
【发布时间】:2022-01-23 15:28:34
【问题描述】:

我正在寻找以下结果的可视化,通过使用热图按列对我的数据进行分组。

数据

    Classroom   Subject    Student
0   A   Mathematics         A.B.
1   B   Computer Science    G.M.
2   A   Computer Science    J.K.
3   B   Literature          S.R.
4   B   Computer Science    A.M.
5   A   Literature          S.R.
6   B   Mathematics         S.E.
7   C   Literature          S.T.
8   C   Mathematics         R.B.
9   A   Mathematics         B.K.

分组df.groupby(["Classroom", "Subject"]).size()后,我有

Classroom     Subject                    
A             Mathematics                 226
              Literature                  12
              Computer Science            122
B             Mathematics                 1
              Literature                  14
              Computer Science            19
              History                     22
              Geography                   238
C             Mathematics                 5
              Literature                  15
              

Seaborn 可能是根据我在网上找到的创建热图并显示值百分比的最佳解决方案(.sum()/len(df))*100),如果我是对的)。这个解决方案Python - Get percentage based on column values 肯定对我的问题有帮助,即使它不使用 seaborn 进行可视化。 这样做

df.groupby(["Classroom", "Subject"]).size()/len(df)*100

我得到值的百分比。我还需要使用热图绘制这些结果。如果您能对此提供一些帮助,我将不胜感激。

【问题讨论】:

    标签: python pandas seaborn


    【解决方案1】:

    Seaborn 的热图使用数据框的列和索引。 Pandas 的pivot()pivot_table() 可以创建合适的数据框:

    import matplotlib.pyplot as plt
    import seaborn as sns
    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame(
        {'Classroom': np.random.choice(['A', 'B', 'C'], 1000),
         'Subject': np.random.choice(['Mathematics', 'Literature', 'Computer Science', 'History', 'Geography'], 1000),
         'Student': [''.join(np.random.choice([*'VWXYZ'], 7)) for _ in range(1000)]})
    pivoted = pd.pivot_table(df, values='Student', index='Subject', columns='Classroom', aggfunc='count') / len(df) * 100
    
    ax = sns.heatmap(data=pivoted, annot=True, fmt='.1f')
    plt.tight_layout()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 2020-06-29
      • 1970-01-01
      • 2021-05-13
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多