导语
GUIDE ╲
enrichplot是一个非常受欢迎的R包,在官网上每年均有数万次独立IP下载。Bioconductor上共有1905个R包,enrichplot下载量排第45位。它不仅可以对我们本实验室开发的clusterProfiler、DOSE、ReactomePA和meshes等R包的结果进行展示,也有不少R包使用enrichplot进行可视化展示,如:gprofiler2。之前已经有师妹发布了一篇关于使用enrichplot可视化的文章,写的文笔很好,内容讲解也挺细致。enrichplot一直在开发中,会不断有新的功能出现。这次小编便以开发者的身份对它的新功能以及部分隐藏功能做个介绍。
准备工作
enrichplot是发布在Bioconductor上的,师妹在上篇文章中已经介绍了它的安装方法enrichplot—简而美的富集结果可视化!:
if (!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("enrichplot")
对Bioconductor熟悉的朋友应该知道,它是每半年对R包进行一次更新。而勤奋如我们(哈哈!),可能每个月都会给enrichplot增添新的特性。因此如果想尝试更多的新功能的朋友可以安装它的开发版:
if(!requireNamespace("devtools", quietly = TRUE))
install.packages("devtools")
devtools::install_github("YuLab-SMU/enrichplot")
devtools::install_github("YuLab-SMU/clusterProfiler")
devtools::install_github("YuLab-SMU/DOSE")
有些朋友因为网速问题,直接从Github上安装enrichplot会有些困难。这里给大家讲一些小技巧(一般人我不告诉他!):
1、可以先从Github上用迅雷等工具把安装包的zip文件(https://github.com/YuLab-SMU/enrichplot)下载下来,然后使用devtools::install_local()进行安装即可。
2、一些朋友网速实在太差,导致某些依赖包安装不上去,这时可以将R语言的下载方式改为libcurl,并使用国内镜像(如清华镜像):
options(download.file.method = 'libcurl')
options(url.method='libcurl')
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.tuna.tsinghua.edu.cn/bioconductor")
如果上述两个步骤都做了,但还是某些R包装不上,在这里小编心疼你的网速几秒钟。这时你看到提示安装失败的R包后,还可以手动下载它们的安装包(源码格式或者二进制格式都可以),然后手动安装。
绘图函数
01
点图
很多人问这种点图是怎么做出来的:
其实很简单。dotplot支持ggplot2的各种操作,只需要一个分面就完成啦。
library(clusterProfiler)
library(enrichplot)
library(DOSE)
library(org.Hs.eg.db)
data(geneList)
de <- names(geneList)[1:100]
x <- enrichGO(de, 'org.Hs.eg.db', ont = "ALL", pvalueCutoff=0.01)
table(x$ONTOLOGY)
shows <- as.data.frame(x)[c(1:10, 166:176, 194:204), "ID"]
p <- dotplot(x, showCategory = shows) +facet_grid(ONTOLOGY ~ ., scales="free")
这个例子展示的是对单组基因富集结果的点图可视化。其实我们的dotplot是可以对多组基因的富集结果进行展示的:
data(gcSample)
xx <- compareCluster(gcSample, fun="enrichKEGG",
organism="hsa", pvalueCutoff=0.05)
## 如果大家这一步出现下载不完全的现象,请安装github上最新版的clusterProfiler
dotplot(xx)
02
Gene-Concept Network
`cnetplot`函数可以将基因与它们所富集到的 biological concepts(如GO terms和KEGG pathways等)之间的复杂联系用网络图清晰的展现出来。对于单组数据的可视化,师妹在之前的文章中已有介绍。其实cnetplot有众多的参数来支持用户来定制这个网络图,如节点大小,节点label大小,layout等,具体可参考我们提供的帮助文档。
library(DOSE)
data(geneList)
de <- names(geneList)[abs(geneList) > 2]
edo <- enrichDGN(de)
edox <- setReadable(edo, 'org.Hs.eg.db', 'ENTREZID')
p1 <- cnetplot(edox, foldChange=geneList)
## categorySize can be scaled by 'pvalue' or 'geneNum'
p2 <- cnetplot(edox, categorySize="pvalue", foldChange=geneList)
p3 <- cnetplot(edox, foldChange=geneList, circular = TRUE, colorEdge = TRUE)
cowplot::plot_grid(p1, p2, p3, ncol=3, labels=LETTERS[1:3], rel_widths=c(.8, .8, 1.2))
有朋友说画出的网络图没有边,这个锅我们是不背的。大家可以保存成pdf,这样就会发现它其实是有边的。
一些朋友可能还不知道,我们的cnetplot是支持多组数据富集结果的可视化的。以`gcSample`数据为例:
data(gcSample)
str(gcSample)
## List of 8
## $ X1: chr [1:216] "4597" "7111" "5266" "2175" ...
## $ X2: chr [1:805] "23450" "5160" "7126" "26118" ...
## $ X3: chr [1:392] "894" "7057" "22906" "3339" ...
## $ X4: chr [1:838] "5573" "7453" "5245" "23450" ...
## $ X5: chr [1:929] "5982" "7318" "6352" "2101" ...
## $ X6: chr [1:585] "5337" "9295" "4035" "811" ...
## $ X7: chr [1:582] "2621" "2665" "5690" "3608" ...
## $ X8: chr [1:237] "2665" "4735" "1327" "3192" ...
这里的基因都是基因ID。如果希望显示出gene symbol,可以使用`setReadable`进行转换。
xx <- compareCluster(gcSample, fun="enrichKEGG",
organism="hsa", pvalueCutoff=0.01)
# `setReadable` fucntion can convert gene from gene ID to gene symbol.
xx@readable = FALSE
xxx <- setReadable(xx, 'org.Hs.eg.db', 'ENTREZID')
p1 <- cnetplot(xxx, legend_n = 3)
p2 <- cnetplot(xx, legend_n = 3)
p <- cowplot::plot_grid(p1, p2, ncol=2, labels=LETTERS[1:2])
ggsave(p, file="cnetplot_multi.pdf")
当然,自由调节layout的功能是必须有的!
如果大家跑这段代码发现参数错误,那可能是我们更新了参数,或者大家的R包版本太老了的缘故。只要在R中输入"?cnetplot"查看一下你们电脑里相应版本的文档即可。
p1 <- cnetplot(xxx, layout="nicely",node_label="none",
legend_n = 3)
p2 <- cnetplot(xxx, layout="circle", node_label="none",
cex_category = 0.05, cex_gene = 0.05,
legend_n = 3)
p3 <- cnetplot(xxx, layout="kk",node_label="none",
legend_n = 3)
p4 <- cnetplot(xxx,circular = TRUE,,cex_category = 0.05,
cex_gene = 0.05, node_label="none",
legend_n = 3)
cowplot::plot_grid(p1, p2, p3, p4, ncol=2, labels=LETTERS[1:4])
03
Enrichment Map
大家可能也猜到了,`emapplot`函数同样支持多组数据结果的可视化。至于它的用法跟centplot类似,就不用代码占篇幅了。小编这里要介绍一种新的图形:
这个图叫做功能分组网络图。这里的每一个节点都是一个通路/功能。此图可以将这些通路/功能根据相似性聚成功能组,并且支持多种相似性计算算法。当然了,既然是enrichplot出品,那必须是既能支持单组数据,又能支持多组数据啦。并且我们还提供了两种group label的表现形式:
此函数名为emapplot_cluster。如果大家用enrichplot用的比较多的话,会发现每种函数用起来都很类似。此函数的具体用法大家可关注“作图丫”公众号,我们后续会进行详细讲解。
小编总结
由于公众号里不适合太长的篇幅,因此小编没有将enrichplot的所有新功能介绍完。而enrichplot也会一直进行开发与维护,大家所能想到的所有富集分析的优秀可视化,enrichplot都将会支持,并且enrichplot支持多个富集分析软件结果的可视化。因此,当你做完富集分析但不知道要以哪种图形展现时,别犹豫了,打开enrichplot看看吧,你想要的,我们全都有!