gplots heatmap.2和ggplot2 geom_tile实现数据聚类和热图plot

主要步骤

ggplot2

  • 数据处理成矩阵形式,给行名列名
  • hclust聚类,改变矩阵行列顺序为聚类后的顺序
  • melt数据,处理成ggplot2能够直接处理的数据结构,并加上列名
  • ggplot_tile进行画图

gplots

  • 数据处理成矩阵形式,给行名列名
  • 调制颜色并用heatmap.2画热图(heatmap.2函数内部用hclustfun 进行聚类)

R语言代码

library(ggplot2) 
library(data.table)
CN_DT <- fread("/home/ywliao/project/Gengyan/ONCOCNV_result/ONCOCNV_all_result.txt",sep="\t")
dt <- CN_DT[cfDNATime=="cfDNA1"]
wdt <- dcast(dt,Gene~Sample,value.var = "CN",fun.aggregate = mean)
data <- as.matrix(wdt[,2:length(wdt),with=F])  #数据矩阵
rownames(data) <- unlist(wdt[,1]) 

hc<-hclust(dist(data),method = "average") #对行进行聚类
rowInd<-hc$order #将聚类后行的顺序存为rowInd
hc<-hclust(dist(t(data)),method = "average")  #对矩阵进行转置,对原本的列进行聚类
colInd<-hc$order  #将聚类后列的顺序存为colInd
data<-data[rowInd,colInd] #将数据按照聚类结果重排行和列
dp=melt(data)    #对数据进行融合,适应ggplot的数据结构,以进行热图的绘制
colnames(dp) <- c("Gene","Sample","Value")
p <- ggplot(dp, aes(Sample,Gene)) + geom_tile(aes(fill = as.factor(Value)))+theme(axis.text.x=element_text(angle = 90))+ guides(fill = guide_legend(title = "Copy Number")) + scale_fill_brewer(palette = 3)
p
library(gplots)
library(data.table)
CN_DT <- fread("/home/ywliao/project/Gengyan/ONCOCNV_result/ONCOCNV_all_result.txt",sep="\t")
dt <- CN_DT[cfDNATime=="cfDNA1"]
wdt <- dcast(dt,Gene~Sample,value.var = "CN",fun.aggregate = mean)
dp <- as.matrix(wdt[,2:length(wdt),with=F])  #数据矩阵

labrow <- unlist(wdt[,1,with=F]) #行名
colorsChoice<- colorRampPalette(c("green","black","red"))  #调制颜色

heatmap.2(dp,labRow = labrow,col=colorsChoice(5),breaks = c(1,1.5,2,2.5,3,4),density.info="histogram",
          hclustfun = function(c)hclust(c,method="average"),keysize = 1.5, cexRow=0.5,trace = "none");

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

最大子序列和问题之算法优化

16030
来自专栏闪电gogogo的专栏

压缩感知重构算法之正则化正交匹配追踪(ROMP)

  在看代码之前,先拜读了ROMP的经典文章:Needell D,VershyninR.Signal recovery from incompleteand i...

37460
来自专栏null的专栏

机器学习算法实现解析——libFM之libFM的训练过程概述

本节主要介绍的是libFM源码分析的第四部分——libFM的训练。 FM模型的训练是FM模型的核心的部分。 4.1、libFM中训练过程的实现 在FM模型的训练...

537110
来自专栏锦小年的博客

复杂网络(2)--图论的基本理论-最小生成树问题

连通且不含圈的无向图称为树(tree)。树中度为1的节点称为树叶,度大于1的节点称为分支点。 若图G=(V,E)的生成子图是一棵树,则称该树为图G的生成树(...

39670
来自专栏软件开发 -- 分享 互助 成长

最小生成树-Prim算法和Kruskal算法

Prim算法 1.概览 普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里...

706100
来自专栏崔庆才的专栏

自然语言处理中句子相似度计算的几种方法

在做自然语言处理的过程中,我们经常会遇到需要找出相似语句的场景,或者找出句子的近似表达,这时候我们就需要把类似的句子归到一起,这里面就涉及到句子相似度计算的问题...

44530
来自专栏人工智能LeadAI

决策树会有哪些特性?

决策树(Decision Tree)是机器学习中最常见的算法, 因为决策树的结果简单,容易理解, 因此应用超级广泛, 但是机器学习的专家们在设计决策树的时候会考...

38870
来自专栏数据科学与人工智能

【算法】利用文档-词项矩阵实现文本数据结构化

“词袋模型”一词源自“Bag of words”,简称 BOW ,是构建文档-词项矩阵的基本思想。对于给定的文本,可以是一个段落,也可以是一个文档,该模型都忽略...

45270
来自专栏崔庆才的专栏

自然语言处理中句子相似度计算的几种方法

23950
来自专栏崔庆才的专栏

TensorFlow Bi-LSTM实现文本分词

本节我们来尝试使用 TensorFlow 搭建一个双向 LSTM (Bi-LSTM) 深度学习模型来处理序列标注(分词)问题,主要目的是学习 Bi-LSTM 的...

91870

扫码关注云+社区

领取腾讯云代金券