如何按照热图中的顺序输出表达量文件 返回

大家在用热图软件,例如,pheatmap绘制热图的之后,经常要面临一个问题就是:

图是画出来了,但如果想从图对应到基因,并查询对应基因的表达量就非常麻烦。因为热图聚类功能会打乱样本和基因的顺序,原来的表达量总表已经发生了变化,查询起来就非常麻烦。

尤其当热图中的基因和样本数非常巨大的时候,我们根本看不清热图中的每个格子,再要直接对应回原表格就更加困难。

例如,下图的热图是样本和基因都进行了聚类。

但原绘图文件是这样的,顺序和热图不同。

针对这个问题,我们使用R脚本可以轻松解决。以下的R脚本就可以实现输出重排后(与热图保持一致)的表达量表。

重排后的文件这个样子,将和热图顺序保持一致。

#########分割线##########
library(pheatmap)
exp = read.table("exp_top30.original.txt",header=T,row.names=1,sep="\t")
result <- pheatmap(exp,scale="row")  # 保存热图的绘图关键数据## 从热图中提取样本顺序的编号和样本名
col_oder=result$tree_col$order      # 保存热图列顺序(序号)
row_oder=result$tree_row$order      # 保存热图行顺序(序号)
cn_new <- colnames(exp)[col_oder]   # 保存热图的列名
rn_new <- rownames(exp)[row_oder]   # 保存热图的行名

## 生成两个新的与原来的表达量总表长宽相同的数据框(暂时都填写0)
new_exp <- matrix(rep(0,ncol(exp)*nrow(exp)),nrow = nrow(exp),ncol = ncol(exp))
out <- matrix(rep(0,ncol(exp)*nrow(exp)),nrow = nrow(exp),ncol = ncol(exp))

## 将表达量数据读入数据框new_exp,行顺序已经按照热图的顺序重排
for (i in 1:ncol(exp)){
        new_exp[,i]=exp[,i][row_oder]
}

## 将表达量数据读入数据框out,列顺序已经进一步按照热图的顺序重排
for (i in 1:ncol(exp)){
        out[,i]= new_exp[,col_oder[ i ]]
}

# 将热图的行名和列名导入到排序后的表达量总表中
rownames(out)=rn_new
colnames(out)=cn_new
write.table(out,"hp_exp.txt",sep="\t") #输出重排后的表达量表
############################

更多的技术原创文章,可继续关注我们网站,同时关注基迪奥微信~扫一扫添加基迪奥好友~随时随地关注行业动态!