主要写给自己看的,简单做个记录,如果能帮到谁也挺好。

目的为镜像调整热图行聚类结果(强迫症系列)

一开始以为有参数设置很简单,后面发现似乎只能自己制作一个聚类参数,然后传入pheatmap。(如有简单方法还烦请告知)

调整前后对比

其实就是拿表达矩阵(matrix)+自己想要调整的顺序(manual_order)这两个量自己制作一个 cluster_rows参数,传入pheatmap即可。

代码是从这里学到的,基本没有改动

聚类热图怎么按自己的意愿调整分支的顺序?_刘永鑫Adam的博客-CSDN博客

exprTable <- as.data.frame(matrix)#若是镜像列名需要转置matrix,行不需要

row_dist = dist(exprTable,method = "euclidean")

hclust_1 <- hclust(row_dist)

manual_order = c("行名1","行名2","行名3","行名4"....)#自己想要的镜像顺序

dend = reorder(as.dendrogram(hclust_1), wts=order(match(manual_order, rownames(exprTable))))

row_cluster <- as.hclust(dend)

pheatmap(matrix,cluster_rows = row_cluster,....)

只要改动matrix和manual_order即可

有一个坑是我自己踩到了,放在这里记录一下

我的表达矩阵的标准化是通过pheatmap(scale = "row")实现的。所以在设置了scale的前提下,pheatmap先对matrix进行了标准化操作,再进行层次聚类。

所以在制作cluster_rows参数时,上述代码中的matrix应该为标准化后的矩阵

matrix2 <- round(t(apply(matrix,1, scale)),2)#手动按照行标准化,取两位小鼠

colnames(matrix2) <- colnames(matrix)

如果拿标准化前的矩阵制作参数,后续图片镜像可能会有问题

这个就是一开始失败的产物,想了小半天才知道问题出现在哪里

 完整代码在这里

matrix2 <- round(t(apply(matrix,1, scale)),2)#手动按照行标准化,取两位小鼠

colnames(matrix2) <- colnames(matrix)

exprTable <- as.data.frame(matrix2)#若是镜像列名需要转置matrix,行不需要

row_dist = dist(exprTable,method = "euclidean")

hclust_1 <- hclust(row_dist)

manual_order = c("行名1","行名2","行名3","行名4"....)#自己想要的镜像顺序

dend = reorder(as.dendrogram(hclust_1), wts=order(match(manual_order, rownames(exprTable))))

row_cluster <- as.hclust(dend)

pheatmap(matrix,cluster_rows = row_cluster,....)

manual_order可以手打,也可以把最初热图的顺序提取出来前后调动一下

t <- pheatmap(matrix,....)#最初的热图存于一个变量中

t$tree_row$order#聚类后的行名索引,为数字

old <- rownames(matrix)[t$tree_row$order]#最初热图按聚类结果排序的行名

#我自己的案例是把前1到15和后16到31换一下顺序

manual_order = old[c(16:31,1:15)]#修改后的镜像顺序

参考文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: