前言

一般而言,我们做完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中为我们提供了一个有用的函数unnest
path3 <- 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 scale
ibaq2 <- sweep(ibaq,2,apply(ibaq, 2, sum),FUN = "/") #caculate each group mean value
group <- 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$Pathway annotation_row <- select(Exp_log2,Level2,Level1)
rownames(annotation_row) <- Exp_log2$Pathway pheatmap(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

[R] 如何绘制各样本的pathway丰度热图?的更多相关文章

  1. RNA_seq 热图绘制

    若已经拿到表达矩阵exprSet 若差异较大,进行log缩小不同样本的差距 1.热图全体 1 ##加载包 2 library(pheatmap) 3 4 ##缩小表达量差距 5 exprSet < ...

  2. R语言绘制花瓣图flower plot

    R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观: 在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以 ...

  3. R语言绘制相对性关系图

    准备 第一步就是安装R语言环境以及RStudio 图绘制准备 首先安装库文件,敲入指令,回车 install.packages('corrplot') 然后安装excel导入的插件,点击右上角impo ...

  4. R语言学习 - 热图绘制heatmap

    生成测试数据 绘图首先需要数据.通过生成一堆的向量,转换为矩阵,得到想要的数据. data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/ ...

  5. 一幅图解决R语言绘制图例的各种问题

    一幅图解决R语言绘制图例的各种问题 用R语言画图的小伙伴们有木有这样的感受,"命令写的很完整,运行没有报错,可图例藏哪去了?""图画的很美,怎么总是图例不协调?" ...

  6. 用R包中heatmap画热图

    一:导入R包及需要画热图的数据 library(pheatmap) data<- read.table("F:/R练习/R测试数据/heatmapdata.txt",head ...

  7. pheatmap绘制“热图”,你需要的都在这

    热图可以聚合大量的数据,并可以用一种渐进色来优雅地表现,可以很直观地展现数据的疏密程度或频率高低. 本文利用R语言 pheatmap 包从头开始绘制各种漂亮的热图.参数像积木,拼凑出你最喜欢的热图即可 ...

  8. html5 canvas绘制环形进度条,环形渐变色仪表图

    html5 canvas绘制环形进度条,环形渐变色仪表图                                             在绘制圆环前,我们需要知道canvas arc() 方 ...

  9. 解读人:刘佳维,Spectral Clustering Improves Label-Free Quantification of Low-Abundant Proteins(谱图聚类改善了低丰度蛋白的无标记定量)

    发表时间:(2019年4月) IF:3.95 单位: 维也纳医科大学: 欧洲生物信息研究所(EMBL-EBI): 分子病理学研究所: 奥地利科学院分子生物技术研究所: Gregor Mendel分子植 ...

随机推荐

  1. csp总结 (差点爆零的总结)

    T1,iterator忘了怎么写了,想了很久都想不出来有什么可以替代,只好O(n^2): T2,不会,只会打暴力 T3,自以为是正解,写了很久大概3h,却一直过不了大样例,大样例输出全是0: T4,不 ...

  2. C语言基础知识总结大全

    1.入门程序 #include <stdio.h> int main() { printf("Hello World!"); return 0; } 2.数据类型 数据 ...

  3. C语言中都有哪些常见的数据结构你都知道几个?

    上次在面试时被面试官问到学了哪些数据结构,那时简单答了栈.队列/(ㄒoㄒ)/~~其它就都想不起来了,今天有空整理了一下几种常见的数据结构,原来我们学过的数据结构有这么多~ 首先,先来回顾下C语言中常见 ...

  4. Python之@property详解及底层实现介绍

    转自:https://blog.csdn.net/weixin_42681866/article/details/83376484 前文 Python内置有三大装饰器:@staticmethod(静态 ...

  5. Spring MVC:HandlerMapping

    HandlerMapping 的类图 Spring中存在两种类型的handlers.第一种是 handler mappings(处理程序映射).它们的角色定位与前面所描述的功能完全相同.它们尝试将当前 ...

  6. CSP-S 2021 爆零记

    前言 本人今年高二蒟蒻OIer,高一刚刚接触OI. 感觉可能要直接退役了555~ 希望还有机会靠NOIP翻盘 Day - 暑假 为了备战CSP提前返校,与xzh一起划水,总之刷了不少题,我也大受震撼 ...

  7. (1)Zookeeper在linux环境中搭建集群

    1.简介 ZooKeeper是Apache软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务.同步服务和命名注册.ZooKeeper的架构通过冗余服务实现高可用性.Zookeeper ...

  8. 记录 mysql 使用时遇到的问题

    1,linux平台上mysqld和mysql的区别. 首先,mysql数据库是标准的c/s架构,yum安装时注意到了,有mysql和mysql-server包 mysql是客户端的工具,mysqld ...

  9. Win powershell执行策略配置

    参考连接:https://blog.csdn.net/jeffxu_lib/article/details/84710386 参考连接:http://www.cragsman.org/index.ph ...

  10. docker使用redis过程出现的问题记录

    第一次使用docker搭建成功了单机版redis,但在使用过程中,还是遇到了不少问题,故而先把这些问题记录下来,以防后面再出现会忘记. 目前,只是在docker中搭建了三个单机版的容器,打算先捣鼓一周 ...