关系(二)利用python绘制热图

关系(二)利用python绘制热图

热图 (Heatmap)简介

1

热图适用于显示多个变量之间的差异,通过颜色判断彼此之间是否存在相关性。

快速绘制

  1. 基于seaborn

    import seaborn as sns
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib as mpl
    
    # 自定义数据
    df = pd.DataFrame(np.random.random((5,5)), columns=["a","b","c","d","e"])
    
    # 利用seaborn的heatmap函数创建
    sns.heatmap(df)
    
    plt.show()
    

    2

定制多样化的热图

自定义热图一般是结合使用场景对相关参数进行修改,并辅以其他的绘图知识。参数信息可以通过官网进行查看,其他的绘图知识则更多来源于实战经验,大家不妨将接下来的绘图作为一种学习经验,以便于日后总结。

seaborn主要利用heatmap绘制热图,可以通过seaborn.heatmap了解更多用法

  1. 不同输入格式的热图

    import matplotlib.pyplot as plt
    import numpy as np
    import seaborn as sns
    import pandas as pd
    np.random.seed(0)
    
    sns.set(font='SimHei', font_scale=0.8, style="white") # 解决Seaborn中文显示问题
    
    # 初始化
    fig = plt.figure(figsize=(12,8))
    
    # 宽型:是一个矩阵,其中每一行都是一个个体,每一列都是一个观察值。即热图的每个方块代表一个单元格
    df = pd.DataFrame(np.random.random((6,5)), columns=["a","b","c","d","e"])
    
    ax = plt.subplot2grid((2, 2), (0, 0), colspan=1)
    sns.heatmap(df)
    ax.set_title('宽型')
    
    # 方型:相关矩阵热图
    df = pd.DataFrame(np.random.random((100,5)), columns=["a","b","c","d","e"]) 
    corr_matrix=df.corr() # 计算相关矩阵
    
    ax = plt.subplot2grid((2, 2), (0, 1), colspan=1)
    sns.heatmap(corr_matrix)
    ax.set_title('方型')
    
    # 方型:对角矩阵
    df = pd.DataFrame(np.random.random((100,5)), columns=["a","b","c","d","e"]) 
    corr_matrix=df.corr() # 计算相关矩阵
    mask = np.zeros_like(corr_matrix)
    mask[np.triu_indices_from(mask)] = True # 生成上三角蒙版
    
    ax = plt.subplot2grid((2, 2), (1, 0), colspan=1)
    sns.heatmap(corr_matrix, mask=mask, square=True)
    ax.set_title('方型-对角矩阵')
    
    # 长型:每一行代表一个观测结果,输入三个变量(x,y,z)
    people = np.repeat(("A","B","C","D","E"),5)
    feature = list(range(1,6))*5
    value = np.random.random(25)
    df = pd.DataFrame({'feature': feature, 'people': people, 'value': value })
    # 数据透视
    df_wide = df.pivot_table( index='people', columns='feature', values='value') 
    
    ax = plt.subplot2grid((2, 2), (1, 1), colspan=1)
    sns.heatmap(df_wide)
    ax.set_title('长型')
    
    fig.tight_layout() # 自动调整间距
    plt.show()
    

    3

  2. 自定热图

    import matplotlib.pyplot as plt
    import numpy as np
    import seaborn as sns
    import pandas as pd
    np.random.seed(0)
    
    sns.set(font='SimHei', font_scale=0.8, style="white") # 解决Seaborn中文显示问题
    
    # 自定义数据
    df = pd.DataFrame(np.random.random((10,10)), columns=["a","b","c","d","e","f","g","h","i","j"])
    
    # 初始化
    fig = plt.figure(figsize=(9,8))
    
    # 显示值标签
    ax = plt.subplot2grid((3, 2), (0, 0), colspan=1)
    sns.heatmap(df, annot=True, annot_kws={"size": 7})
    ax.set_title('显示值标签')
    
    # 自定义网格线
    ax = plt.subplot2grid((3, 2), (0, 1), colspan=1)
    sns.heatmap(df, linewidths=2, linecolor='yellow')
    ax.set_title('自定义网格线')
    
    # 移除x、y或者颜色bar
    ax = plt.subplot2grid((3, 2), (1, 0), colspan=1)
    sns.heatmap(df, yticklabels=False, cbar=False)
    ax.set_title('移除部分轴元素')
    
    # 减少标签数量
    ax = plt.subplot2grid((3, 2), (1, 1), colspan=1)
    sns.heatmap(df, xticklabels=4)
    ax.set_title('减少标签数量')
    
    # 指定中心值
    ax = plt.subplot2grid((3, 2), (2, 0), colspan=1)
    sns.heatmap(df, center=1)
    ax.set_title('指定中心值')
    
    # 指定颜色
    ax = plt.subplot2grid((3, 2), (2, 1), colspan=1)
    sns.heatmap(df, cmap="YlGnBu")
    ax.set_title('指定颜色')
    
    
    fig.tight_layout() # 自动调整间距
    plt.show()
    

    4

  3. 数据标准化

    import matplotlib.pyplot as plt
    import numpy as np
    import seaborn as sns
    import pandas as pd
    np.random.seed(0)
    
    sns.set(font='SimHei', font_scale=0.8, style="white") # 解决Seaborn中文显示问题
    
    # 自定义数据
    df = pd.DataFrame(np.random.randn(10,10) * 4 + 3)
    # 列含异常值与标准化
    df_col = df.copy()
    df_col[1]=df_col[1]+40 # 构造异常数据点
    df_norm_col=(df_col-df_col.mean())/df_col.std() # 按列标准化
    # 行含异常值与标准化
    df_row = df.copy()
    df_row.iloc[2]=df_row.iloc[2]+40 # 构造异常数据点
    df_norm_row = df_row.apply(lambda x: (x-x.mean())/x.std(), axis = 1) # 按行标准化
    
    
    # 初始化
    fig = plt.figure(figsize=(12,8))
    
    # 列含异常数据
    ax = plt.subplot2grid((2, 2), (0, 0), colspan=1)
    sns.heatmap(df_col, cmap='viridis')
    ax.set_title('列含异常数据')
    
    # 按列标准化
    ax = plt.subplot2grid((2, 2), (0, 1), colspan=1)
    sns.heatmap(df_norm_col, cmap='viridis')
    ax.set_title('按列标准化')
    
    # 行含异常数据
    ax = plt.subplot2grid((2, 2), (1, 0), colspan=1)
    sns.heatmap(df_row, cmap='viridis')
    ax.set_title('行含异常数据')
    
    # 按行标准化
    ax = plt.subplot2grid((2, 2), (1, 1), colspan=1)
    sns.heatmap(df_norm_col, cmap='viridis')
    ax.set_title('按行标准化')
    
    
    fig.tight_layout() # 自动调整间距
    plt.show()
    

    5

  4. 引申-聚类热图

    可以通过seaborn.clustermap了解更多用法

    import matplotlib.pyplot as plt
    import numpy as np
    import seaborn as sns
    import pandas as pd
    
    # 导入数据
    df = pd.read_csv('https://raw.githubusercontent.com/holtzy/The-Python-Graph-Gallery/master/static/data/mtcars.csv')
    df = df.set_index('model')
    
    # 基本聚类热图
    g = sns.clustermap(df, standard_scale=1) # 标准化处理
    
    plt.show()
    

    5

总结

以上通过seaborn的heatmap快速绘制热图,并通过修改参数或者辅以其他绘图知识自定义各种各样的热图来适应相关使用场景。

共勉~

相关推荐

  1. python绘制家庭关系炫酷旭日

    2024-04-02 22:36:01       35 阅读
  2. python绘制水果价格与利润1-3

    2024-04-02 22:36:01       21 阅读
  3. python绘制等高线

    2024-04-02 22:36:01       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 22:36:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 22:36:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 22:36:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 22:36:01       20 阅读

热门阅读

  1. Mysql数据库——InnoDB和MyISAM区别与联系

    2024-04-02 22:36:01       15 阅读
  2. 2800. 包含三个字符串的最短字符串

    2024-04-02 22:36:01       18 阅读
  3. NoSQL数据库

    2024-04-02 22:36:01       18 阅读
  4. docker + miniconda + python 环境安装与迁移(简化版)

    2024-04-02 22:36:01       16 阅读
  5. 22 多态

    22 多态

    2024-04-02 22:36:01      13 阅读
  6. 算法——逆波兰式

    2024-04-02 22:36:01       14 阅读
  7. 超越传统:探讨ChatGPT在学术论文写作中的突破

    2024-04-02 22:36:01       13 阅读