美文网首页微生物信息学R可视化
按照热图聚类结果来给样本分组

按照热图聚类结果来给样本分组

作者: 小洁忘了怎么分身 | 来源:发表于2020-12-03 16:32 被阅读0次

    1.需求


    如图,热图自带聚类树,将样本(列)分成了三个簇。想要按照聚类的结果,获取到每个样本具体属于哪一簇的信息,并将这个信息添加到热图上。

    2.作图的数据

    输入数据是个表达矩阵,行为基因,列为样本,用随机数整一个。

    rm(list = ls())
    n = matrix(rnorm(800),nrow = 8)
    n[,1:30] = n[,1:30]+ 3
    n[,60:100] = n[,60:100] +6
    n = n[,sample(1:100,100)]
    rownames(n) = paste0("gene",1:8)
    colnames(n) = paste0("sample",1:100)
    n[1:4,1:4]
    
    ##          sample1  sample2  sample3  sample4
    ## gene1  0.5794523 3.837055 2.779561 2.817760
    ## gene2  0.3623024 4.440195 3.973745 1.896885
    ## gene3 -0.7953442 3.026784 2.260808 2.363162
    ## gene4 -0.2121879 1.033756 1.997658 3.837127
    

    3.热图探索

    常规的热图很简单

    p = pheatmap::pheatmap(n,show_colnames = F,scale = "row")
    

    我们能知道图上样本的排列顺序,但是不知道每一簇都有多少个样本,对应着哪些。

    让三簇分的更清楚一些

    p2 = pheatmap::pheatmap(n,show_colnames = F,scale = "row",cutree_cols = 3)
    

    加上cutree_cols参数,热图上就有了沟,将样本分成了指定数量的组。

    还是不知道怎样能得出三组个自是哪些样本的信息。我以为p2$tree_col$order里面会指明,然而并没有。

    遂,搜索关键词get cluster in pheatmap,找到了一个网页:https://www.biostars.org/p/287512/ ,看到cutree居然还是个单独的函数。摸索了一下怎么使用

    m = cutree(p2$tree_col,k = 3)
    head(m)
    
    ## sample1 sample2 sample3 sample4 sample5 sample6 
    ##       1       2       2       2       1       3
    

    这就完事儿了。m里面记录了每个样本属于哪个分组。这就是我想要的信息。

    3.在热图上添加聚类分组信息

    常规的差异分析也会用到列注释热图来展示数据的分组,那是已知分组,直接展示两组间差别的,和今天做的根据聚类的结果来分组不一样的哦

    至于列注释如何添加上去查看帮助文档,按照annotation_col参数的示例来组织数据即可啦!

    an = data.frame(row.names = colnames(n),
                    m = factor(m,labels = c("A","B","C")))
    pheatmap::pheatmap(n,show_colnames = F,scale = "row",cutree_cols = 3,
                       annotation_col = an)
    

    这样 我们就根据聚类的结果来给原来的矩阵列(样本)分了组~

    相关文章

      网友评论

        本文标题:按照热图聚类结果来给样本分组

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