[R] 如何绘制各样本的pathway丰度热图?

前言

一般而言,我们做完pathway富集分析,就做下气泡图或bar图来进行展示,但它们实际上只考虑了富集因子和Pvalue。如果我们不关注这两个因素,而是在乎样本本身的pathway丰度呢?

对于KEGG热图绘制,大部分是做到KO层级,因为基因/蛋白和KO的绝大部分都是一对一的对应关系。如果一定要做Pathway的丰度热图呢?一般的方法是将该通路中的基因/蛋白的丰度进行累加来表示该pathway的丰度。

好了,现在我们来计算并绘制热图吧。

数据处理

得到pathway富集分析结果文件一般是这样的:

Proteins字段中的基因/蛋白是用分号隔开的。

> colnames(path)[1] 'X.Pathway' 'Sample1..1113.' 'Sample2..15327.' 'Pvalue' 'Pathway.ID' 'Level1' [7] 'Level2' 'Proteins' 'KOs'

除此之外,我们还需要一个基因表达矩阵:

四组样本,每组3个重复,共12个。

我们的目标就是整理成这样的table,用来绘制热图:

从两个表可知,数据处理关键就是pathway中的蛋白丰度求和。把pathway中对应的各蛋白展开,再匹配到表达矩阵上,最后归并求和就好了,思路清晰了就动手吧。

library(tidyverse)path2 <- path %>% dplyr::select(X.Pathway,Level1,Level2,Proteins)#下面这一步最关键,dplyr中为我们提供了一个有用的函数unnestpath3 <- path2 %>% mutate(ProteinID = strsplit(Proteins, ';')) %>% unnest()colnames(path3)[1] <- 'Pathway'#如果不熟悉,这一步也可用Map函数配合do.call来完成:out <- do.call(rbind, Map(cbind, path2$X.Pathway,path2$Level1,path2$Level2,strsplit(path2$Proteins, ';')))out <- as.data.frame(out)colnames(out) <- colnames(path2)

得到的结果是这样的:

Proteins列中的蛋白都一一和Pathway对应起来了。后面就好办了,直接贴代码:

#sum scaleibaq2 <- sweep(ibaq,2,apply(ibaq, 2, sum),FUN = '/')#caculate each group mean valuegroup <- factor(rep(c('S01CC','S11SC','S12CC','S12SC'),each=3),levels = c('S11SC','S12SC','S12CC','S01CC'))out <- apply(ibaq2,1,function(x){ dat <- data.frame(group=group,value=x) dat_mean <- dat %>% group_by(group) %>% summarise(mean=mean(value)) %>% select(mean)}) #注意此处计算均值未用na.rm参数out[[1]]out2 <- as.data.frame(t(do.call(cbind,out)))colnames(out2) <- levels(group)rownames(out2) <- rownames(ibaq2)exp <- data.frame(ProteinID=rownames(out2),out2)data1 <- left_join(path3,exp,by='ProteinID') %>% dplyr::select(1:3,6:9) %>% gather(Sample,Abundance,-c(Pathway,Level1,Level2)) %>% group_by(Pathway,Sample) %>% summarise(Sum=sum(Abundance)) %>% spread(Sample,Sum)tmp <- path3[1:3]annotation <- tmp[!duplicated(tmp),]length(intersect(data1$Pathway,annotation$Pathway))#先按pathway排序,再按level2,level1排序plotdat <- left_join(annotation,data1,by='Pathway') %>% arrange(Pathway) %>% arrange(Level2) %>% arrange(Level1)

现在已经得到想要的数据了。

绘图

这个就不用多解释了。

library(pheatmap)Exp_log2=plotdat  #实际上我中间处理了别的,这里便于绘图直接赋值colnames(Exp_log2)exp_plot <- select(Exp_log2,S11SC,S12SC,S12CC,S01CC)rownames(exp_plot) <- Exp_log2$Pathwayannotation_row <- select(Exp_log2,Level2,Level1)rownames(annotation_row) <- Exp_log2$Pathwaypheatmap(exp_plot,cluster_rows = F,cluster_cols = F,scale = 'row',         annotation_row = annotation_row,          border_color = NA,          #angle_col=45,          color = colorRampPalette(c('blue','white','red'))(50))

图片大概成这样:

根据需要挑选一些pathway展示吧,太多不好看。

Ref: https://stackoverflow.com/questions/28719088/r-semicolon-delimited-a-column-into-rows

(0)

相关推荐

  • 比较不同流程(limma/voom,edgeR,DESeq2 )差异分析的区别

    前言: 距离第一次听说生信已经十几年了,现在是邋遢大叔重新开始学代码,精力确实已不像从前,各位入坑还是要乘早.后来约莫在5年前,课题组当时有个RNA-Seq数据,lab meeting时听瑞典小哥在汇 ...

  • 技术贴 | R语言:构建一个转录代谢互作调控网络:(二)热图的美化以及大样本分组信息的快速注释

    本文由可爱的乔巴根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 导读 上期介绍了利用WGCNA包中的Cor函数和corPvalueStudent函数计算两组小样本的相关性并进行热图可 ...

  • PICRUSt2分析实战:16S扩增子OTU或ASV预测宏基因组、新增KEGG层级

    PICRUSt2分析实战:16S扩增子OTU或ASV预测宏基因组.新增KEGG层级 更新时间:2021年7月8日 PICRUSt推出了近8年,引用5000余次. 现推出PICRUSt2,202年再次霸 ...

  • 微生物组数据再也别用相对丰度了,结合RastStat完美展示OTU

    写在前面 题目错误,更正为:EasyStat包.我们在分析群落数据的时候,往往相对丰度转化后就展示了,在差异分析中往往使用相对丰度做差异分析不是上上策,因为目前edger和Desep2包中的标准化方式 ...

  • 价值超200元 GSVA基因集变异分析--一个课题的开始

    本篇文章价值超200元,为什么这么说呢,我在网上查询GSVA资料的时候看到一个课程,标价是200,23人学过.作为一个在线课程,录制完以后就可以持续的收益,不说远了,5年后还是会有人买这个课程,所以说 ...

  • 明码标价之公共数据集的WGCNA

    最近有粉丝在我们<生信技能树>公众号后台付费求助,想follow一个文章 做他自己感兴趣的一个数据集的WGCNA分析. 因为他的课题是保密的,我这里不方便提疾病名字和数据集,就show他想 ...

  • 直击热点,巧用ssGSEA进行免疫浸润分析

    关于免疫浸润分析,可谓是最近一段时间的热点,很多文章基于肿瘤免疫细胞微环境进行分析,不管是进行下游基因筛选也好,还是构建诊断模型也好,发表了很多相关的研究.在前面关于<CIBERSORT在免疫浸 ...

  • R绘图笔记 | 热图绘制

    关于绘图,前面介绍了一些: R绘图笔记 | 一般的散点图绘制 R绘图笔记 | 柱状图绘制 R绘图笔记 | 直方图和核密度估计图的绘制 R绘图笔记 | 二维散点图与统计直方图组合 R绘图笔记 | 散点分 ...

  • R语言代码相关疑问标准提问

    关于如何提问,如何高效沟通,其实我们讲解了非常多了,比如我一直推崇的邮件交流:如果你希望我回答你的问题 ,然后也会随机抽取粉丝提问进行解答:答读者问第一弹:R里面差异分析的limma包用法细节 .也高 ...

  • 使用NMF代替层次聚类

    前面我们在教程:使用R包deconstructSigs根据已知的signature进行比例推断,顺利的把508个病人,根据11个signature进行了比例推断,得到的比例矩阵以普通的热图,以及phe ...

  • 仅仅是改变了统计学显著性呢?还是说改变了其本性

    然后很多粉丝留言说,如果并不是按照表达量中位值或者平均值分组,而是取巧使用了surv_cutpoint这样的函数,得到的结果并不好解释,认为这样的的数据处理方式简直是黑白颠倒! 我看到了这样的留言,确 ...

  • 技术贴 | R语言:组学关联分析和pheatmap可视化

    本文由阿童木根据实践经验而整理,希望对大家有帮助. 原创微文,欢迎转发转载. 举例展示R语言组学关联分析的方法.宏基因组数据以KO-样品丰度表为例.代谢组数据以metabolite-样品丰度表为例.基 ...

  • R语言学习系列之“多变的热图”

    咱公众号也不能只做一个系列,所以经过深思熟虑,打算将来慢慢增加一些内容,主要有以下几个系列TCGA数据分析系列GEO数据分析系列"老板给一个基因,我该怎么办"系列文献阅读系列R语言 ...