[! abstract] 富集分析只能看通路?NONONO!clusterProfiler 现在支持一键获取基因或通路的蛋白互作网络(PPI),并结合 ggtangle 包实现高自由度的可视化。想知道怎么把 Fold Change 映射到网络图上?快来看看吧!
这个功能其实早已经有了,当clusterProfiler遇见stringdb…,这次我主要是带来使用
ggtangle进行可视化。如果你想要做网络上的一些分析,github上许愿,或许会梦想成真。
做完富集分析,拿到一堆显著的通路,下一步该干嘛? 除了看通路名字,我们往往还想知道:这些基因之间到底有没有真实的物理互作?它们是不是形成了一个蛋白复合物?
以前,你需要把基因列表导出来,上传到 STRING 官网,下载网络文件,再导入 Cytoscape 画图…… 手都点酸了。
现在,clusterProfiler 直接内置了 getPPI() 函数,让你在 R 语言里一站式搞定!
一行代码获取 PPI
getPPI() 是我们新加入的核武器。它底层连接了 STRING 数据库,可以轻松获取任意基因列表的互作网络。
场景一:我有几个感兴趣的基因
比如你关注 TP53 家族和 BRCA 家族:
library(clusterProfiler)
genes <- c("TP53", "BRCA1", "BRCA2", "S100A6")
# 指定 taxID=9606 (人类)
g <- getPPI(genes, taxID="9606")场景二:我想看富集通路的网络
这才是大杀器!getPPI() 可以直接接收 enrichKEGG 或 enrichGO 的结果对象。
data(geneList, package="DOSE")
de <- names(geneList)[1:100]
x <- enrichKEGG(de)
# 自动获取第 1 条通路的 PPI 网络
g <- getPPI(x, 1)
# 或者一次性获取前 3 条通路的网络
g3 <- getPPI(x, 1:3)不仅如此,你还可以用 add_nodes 参数自动把这些基因的“朋友圈”(邻居节点)也拉进来,发现潜在的关键连结者!
# 把邻居拉进来,看看谁是幕后大佬
g_extended <- getPPI(x, 1, add_nodes = 10)ggtangle:给网络图穿上 ggplot2 的外衣
拿到了网络 g,怎么画图?
默认的 plot(g) 虽然能看,但不够美。
这时候,就要请出我们的新朋友 —— ggtangle 包。它是专门为网络可视化设计的,继承了 ggplot2 的语法,让你像画散点图一样画网络!
基础绘图
library(ggtangle)
library(ggplot2)
ggplot(g) + geom_edge() + geom_point()进阶:把 Fold Change 映射上去
网络图如果只能看结构,那就太单调了。我们想看的是:在这个复合物里,谁上调了?谁下调了?
利用 ggtangle 的 %<+% 操作符(致敬 ggtree),我们可以轻松把外部数据(Fold Change)贴到网络上。
# 1. 准备数据:基因名和 LogFC
# 注意:要把 Entrez ID 转回 Symbol 以匹配网络节点
library(org.Hs.eg.db)
fc <- geneList
names(fc) <- mapIds(org.Hs.eg.db, keys=names(fc), column="SYMBOL", keytype="ENTREZID")
d <- data.frame(name = names(fc), logFC = fc)
# 2. 绘图:节点颜色映射 LogFC
ggplot(g) %<+% d +
geom_edge() +
geom_point(aes(color = logFC), size = 8) +
shadowtext::geom_shadowtext(aes(label = name), color="black", bg.color="white") +
enrichplot::set_enrichplot_color(reverse=F) +
theme_void()
你看,这图是不是瞬间就有了灵魂?
总结
clusterProfiler + ggtangle,让 PPI 网络分析变得前所未有的简单和灵活。
- getPPI(): 连接 STRING,获取数据。
- ggtangle: 连接 ggplot2,自由绘图。
赶紧升级你的 clusterProfiler,试试这个新功能吧!
参考资料:
- Biomedical Knowledge Mining using GOSemSim and clusterProfiler: Protein-Protein Interaction Network