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

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

热图 (Heatmap)简介

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

快速绘制

  1. 基于seaborn

    python 复制代码
    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()

定制多样化的热图

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

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

  1. 不同输入格式的热图

    python 复制代码
    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()
  2. 自定热图

    python 复制代码
    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()
  3. 数据标准化

    python 复制代码
    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()
  4. 引申-聚类热图

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

    python 复制代码
    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()

总结

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

共勉~

相关推荐
阿斯卡码1 小时前
jupyter添加、删除、查看内核
ide·python·jupyter
埃菲尔铁塔_CV算法3 小时前
图像算法之 OCR 识别算法:原理与应用场景
图像处理·python·计算机视觉
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
人工智能·python·机器学习·数据挖掘
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-2.技术栈
人工智能·python·机器学习·数据挖掘
love_and_hope5 小时前
Pytorch学习--神经网络--完整的模型训练套路
人工智能·pytorch·python·深度学习·神经网络·学习
在人间负债^5 小时前
基于标签相关性的多标签学习
人工智能·python·chatgpt·大模型·图像类型
python1566 小时前
使用YOLOv9进行图像与视频检测
开发语言·python·音视频
狂奔solar6 小时前
DQN强化训练agent玩是男人就下xx层小游戏
python·pygame·dqn 强化
互联网杂货铺7 小时前
软件测试之白盒测试(超详细总结)
自动化测试·软件测试·python·测试工具·职场和发展·单元测试·测试用例
Z pz7 小时前
网络编程——Python简单TCP通信功能代码实践
网络·python·tcp/ip