主要写给自己看的,简单做个记录,如果能帮到谁也挺好。
目的为镜像调整热图行聚类结果(强迫症系列)
一开始以为有参数设置很简单,后面发现似乎只能自己制作一个聚类参数,然后传入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)]#修改后的镜像顺序
参考文章
发表评论