[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中为我们提供了一个有用的函数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丰度热图?的更多相关文章
- RNA_seq 热图绘制
若已经拿到表达矩阵exprSet 若差异较大,进行log缩小不同样本的差距 1.热图全体 1 ##加载包 2 library(pheatmap) 3 4 ##缩小表达量差距 5 exprSet < ...
- R语言绘制花瓣图flower plot
R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观: 在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以 ...
- R语言绘制相对性关系图
准备 第一步就是安装R语言环境以及RStudio 图绘制准备 首先安装库文件,敲入指令,回车 install.packages('corrplot') 然后安装excel导入的插件,点击右上角impo ...
- R语言学习 - 热图绘制heatmap
生成测试数据 绘图首先需要数据.通过生成一堆的向量,转换为矩阵,得到想要的数据. data <- c(1:6, 6:1, 6:1, 1:6, (6:1)/10, (1:6)/10, (1:6)/ ...
- 一幅图解决R语言绘制图例的各种问题
一幅图解决R语言绘制图例的各种问题 用R语言画图的小伙伴们有木有这样的感受,"命令写的很完整,运行没有报错,可图例藏哪去了?""图画的很美,怎么总是图例不协调?" ...
- 用R包中heatmap画热图
一:导入R包及需要画热图的数据 library(pheatmap) data<- read.table("F:/R练习/R测试数据/heatmapdata.txt",head ...
- pheatmap绘制“热图”,你需要的都在这
热图可以聚合大量的数据,并可以用一种渐进色来优雅地表现,可以很直观地展现数据的疏密程度或频率高低. 本文利用R语言 pheatmap 包从头开始绘制各种漂亮的热图.参数像积木,拼凑出你最喜欢的热图即可 ...
- html5 canvas绘制环形进度条,环形渐变色仪表图
html5 canvas绘制环形进度条,环形渐变色仪表图 在绘制圆环前,我们需要知道canvas arc() 方 ...
- 解读人:刘佳维,Spectral Clustering Improves Label-Free Quantification of Low-Abundant Proteins(谱图聚类改善了低丰度蛋白的无标记定量)
发表时间:(2019年4月) IF:3.95 单位: 维也纳医科大学: 欧洲生物信息研究所(EMBL-EBI): 分子病理学研究所: 奥地利科学院分子生物技术研究所: Gregor Mendel分子植 ...
随机推荐
- String直接赋字符串和new String的区别
String A="ABC"; String B=new String("ABC"); String A = "ABC";内存会去查找常量池 ...
- UltraSoft - Beta - Scrum Meeting 7
Date: May 23rd, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 暂无 Liuzh 前端 编写忘记密码界面 Kkkk 前端 暂无 王fuji 前端 ...
- PriorityQueue(优先队列)
PriorityQueue 翻译过来就是优先队列,本质是一个堆, 默认情况下堆顶每次都保留最小值,每插入一个元素,仍动态维护堆顶为最小值. PriorityQueue 一个基于优先级的无界优先级队列. ...
- 基础篇:JAVA集合,面试专用
没啥好说的,在座的各位都是靓仔 List 数组 Vector 向量 Stack 栈 Map 映射字典 Set 集合 Queue 队列 Deque 双向队列 关注公众号,一起交流,微信搜一搜: 潜行前行 ...
- (类)Program1.1
1 class MyClass: 2 3 i = 12345 4 5 def __init__(self): 6 self.data = "WOOWOWOWO" 7 8 def f ...
- Verdi Protocol Analyzer Debug 简单使用
转载:Verdi Protocol Analyzer Debug 简单使用_Holden_Liu的博客-CSDN博客_verdi 技巧 文档与源码: User Guide: UVMDebugUserG ...
- linux shell 函数返回值问题(超过255)
最近再写一个shell测试的时候出现问题,函数返回值异常 用shell计算斐波那契数列数列,写了一个shell函数,然后调用的,验证的时候我只随便计算了几个数(10以内),确认结果是正确的就提交了,后 ...
- 最短路spaf及dijkstra模板
spaf的双端队列优化: #include<bits/stdc++.h> #define ll long long const ll maxn=210000; using namespac ...
- udev 使用方法
原文地址 http://blog.163.com/againinput4@yeah/blog/static/122764271200962305339483/ 最近有在研究SD卡设备节点自动创建及挂载 ...
- Nessus home版插件更新
1,进入服务器停止服务 service nessusd stop 2,进入目录执行命令获取Challenge code cd /opt/nessus/sbin/ ./nessuscli fetch - ...