美文网首页
seaborn + matplotlib 画图(三): 热图

seaborn + matplotlib 画图(三): 热图

作者: WuYankang | 来源:发表于2021-03-27 09:16 被阅读0次

    画图笔记第三篇,主要记录了热图和聚类热图的绘制方法,同样使用Iris数据集作为示例。
    Seaborn 中文文档:https://seaborn.apachecn.org/#/README

    seaborn + matplotlib 画图(一): 小提琴图,箱型图
    seaborn + matplotlib 画图(二): 柱状图,散点图
    seaborn + matplotlib 画图(三): 热图

    1. 导入所需包

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

    2. 载入Iris数据

    df = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data', header=None)
    df.columns = ['sepal_length','sepal_width','petal_length','petal_width','class']
    print(df.shape)
    print(df.head())
    print(df['class'].value_counts())
    
    -----outputs-----
    (150, 5)
    
       sepal_length  sepal_width  petal_length  petal_width        class
    0           5.1          3.5           1.4          0.2  Iris-setosa
    1           4.9          3.0           1.4          0.2  Iris-setosa
    2           4.7          3.2           1.3          0.2  Iris-setosa
    3           4.6          3.1           1.5          0.2  Iris-setosa
    4           5.0          3.6           1.4          0.2  Iris-setosa
    
    Iris-virginica     50
    Iris-setosa        50
    Iris-versicolor    50
    Name: class, dtype: int64
    

    3. heatmap热图

    取前5行前4列绘制热图:

    sns.heatmap(df.iloc[:5,:4],        #传入数据
                cmap='Blues',        #设置colormap
                linewidths=1,        #线宽
                linecolor='k',        #线颜色
                square=True,        #是否为方形
                vmin=0, vmax=6,        #设置color bar的范围
                annot=df.iloc[:5,:4].values, fmt='')        #添加文字标注
    
    plt.yticks(ticks=[0.5,1.5,2.5,3.5,4.5],        #设置y轴刻度
               labels=df['id'][:5],        #'id'列是第一篇笔记中加入的
               rotation=0,
               fontsize=12)
    plt.xticks(ticks=[0.5,1.5,2.5,3.5],        #设置x轴刻度
               labels=['Sepal length','Sepal width','Petal length','Petal width'],
               rotation=60,
               rotation_mode='anchor',
               va='center', ha='right',
               fontsize=12)
    plt.ylabel('Ylabel',fontsize=18)
    plt.xlabel('Xlabel',fontsize=18)
    ax = plt.gca()
    ax.xaxis.set_label_coords(0.5, 1.15)        #设置xlabel的位置
    # ax.yaxis.set_label_coords(-0.1, 0.5)        #设置ylabel位置
    plt.show()
    
    heatmap

    4. clustermap聚类热图

    聚类热图可以对行和列进行聚类:

    row_color_list = [pal[i] for i in df['class']]
    g = sns.clustermap(df.iloc[:,0:4],        #传入数据
                       cmap='viridis',        #color map
                       row_colors = row_color_list,        #设置每行的颜色
                       z_score=1,        #z_score: 0对行z-score,1对列z-score
                       center=0,vmin=-3, vmax=3,        #设置color bar的范围以及中心值
                       xticklabels=True, yticklabels=False,        #是否显示x/y轴刻度标签
                       col_cluster=True, row_cluster=True,        #是否对列/行聚类
                       method='average',metric='euclidean',        #聚类算法
                       cbar_pos=(1.03, 0.75, 0.05, 0.2),        #前两位是color bar左下角的坐标,后两位分别是宽和长
                       tree_kws={'linewidths':0.5},        # 树的线宽
                       dendrogram_ratio=(0.1,0.1),        # 树的高度(row,col)
                       colors_ratio=0.02)        # 行/列color标签的高度(row,col)
    
    pal = {'Iris-setosa':'lightcoral','Iris-versicolor':'navajowhite','Iris-virginica':'cornflowerblue'}
    for iris,color in pal.items():        #自定义图注
        g.ax_row_dendrogram.bar(0,0, color=color, label=iris, linewidth=3)
    g.ax_row_dendrogram.legend(loc='center left', bbox_to_anchor=(10.5,0.5), ncol=1, frameon=False,fontsize=12)
    
    g.ax_heatmap.set_xticklabels(g.ax_heatmap.get_xmajorticklabels(),        #可以传入列表作为x轴刻度标签
                                 fontsize = 15)        #设置x轴刻度字体大小
    
    plt.show()
    
    clustermap

    相关文章

      网友评论

          本文标题:seaborn + matplotlib 画图(三): 热图

          本文链接:https://www.haomeiwen.com/subject/hyjshltx.html