在我们新专辑《绘图小技巧2025》中,已经给大家介绍过一个高颜值两组间差异FC值比较散点图:顶刊 Science 文献两分组差异结果比较图复现。今天我们继续来学习绘制其中另一幅的功能富集结果展示图,是一种很新的展示方法哦,且颜值高:
含义:三组 KRAS signatures 基因做 Reactome 数据库的功能富集,并挑选 top10进行展示。
图注:Fig. 4. KRAS-ERK–dependent genes are essential for cell proliferation in PDAC. (A) Overrepresentation analysis for Reactome terms in three KRAS signatures: PDAC KRAS-ERK UP, PDAC KRASi UP, and PDAC iKras UP. The top 10 terms are shown.
数据准备
1、Reactome 数据库通路
Reactome 数据库:是一个免费、开源、数据经过手动筛选和同行评审的生物分子通路知识数据库。数据库链接:https://reactome.org/。
我们在 GSEA 的 MSigDB 数据库去下载 gmt 格式:https://www.gsea-msigdb.org/gsea/msigdb/human/collections.jsp#C2
2、三组 KRAS signatures 基因
这个数据在文章的附件:science.adk0775_data_s4.xlsx 中
开始绘图
这里依然是使用 ggplot2 进行绘制,ggplot2拥有强大的绘图系统。
1、读取数据
先看图中的最左边那个 signature:PDAC KRAS-ERK UP
###
### Create: juan zhang
### Date: 2025-01-16
### Email: 492482942@qq.com
### Blog: http://www.bio-info-trainee.com/
### Forum: http://www.biotrainee.com/thread-1376-1-1.html
### Update Log: 2025-01-16 First version
###
rm(list=ls())
library(ggplot2)
library(clusterProfiler)
library(org.Hs.eg.db)
library(GSEABase)
library(tidyverse)
# three KRAS signatures:
# 1.PDAC KRAS-ERK UP
# 2.PDAC KRASi UP
# 3.PDAC iKras UP
# 首先是 Reactome pathways 功能富集
# 1.PDAC KRAS-ERK UP: 表格 PDAC_siKRAS_ERKi_UP
sig1 <- readxl::read_xlsx("data/science.adk0775_data_s4.xlsx", sheet = "PDAC_siKRAS_ERKi_UP")
head(sig1)
gene <- na.omit(sig1$external_gene_name)
head(gene)
# [1] "AEN" "ANTXR2" "AREG" "AURKA" "CDCA3" "CDCA8"
2、读取 reactome 通路并富集:
## === reactome 数据库通路富集
geneset <- read.gmt("data/c2.cp.reactome.v2024.1.Hs.symbols.gmt")
table(geneset$term)
geneset$term <- gsub(pattern = "REACTOME_","", geneset$term)
# 富集
my_path <- enricher(gene=gene, pvalueCutoff = 1, qvalueCutoff = 1, TERM2GENE=geneset)
# 整理数据,挑选fdr top 10
dat <- my_path@result
dat <- dat[order(dat$p.adjust, decreasing = F),]
dat <- dat[1:10, ]
dat$Description <- factor(dat$Description, levels = dat$Description)
dat$xlab <- 1
head(dat)
colnames(dat)
# 字体大小
max(-log10(dat$p.adjust))*1.01
3、使用 ggplot2 定制化绘图
p1 <- ggplot(data = dat, aes(x = 1, y = rev(Description), colour = -log10(p.adjust))) +
geom_text(size=-log10(dat$p.adjust)*0.3, aes( label = Description), hjust = 0.5) + # hjust = 0.5,居中对齐
scale_color_gradient(low = "#98bf92", high = "#006a01") + # 创建颜色渐变
scale_x_continuous(expand = c(0,0)) + # 调整柱子底部与y轴紧贴
labs(x = " ", y = " ", title = "PDAC KRAS-ERK UP", color="Significance\n(-log10 adj. p-val.)") +
theme(axis.text = element_blank(), # 隐藏x/y轴标签
axis.ticks = element_blank(), # 隐藏x/y轴刻度
# 隐藏其他边框线
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
plot.background = element_rect(fill = "white", color = NA),
panel.background = element_rect(fill = "white", color = NA),
# 隐藏边框线
panel.border = element_blank(),
plot.title = element_text(hjust = 0.5) # 标题居中
) +
# 添加顶部横着的黑线
annotate("segment", x = 0, xend = 2, y = 10.6, yend = 10.6, color = "black", size = 1.1)
p1
# 保存,这里的保存宽和高进行了调整,可以使得结果比较美观
ggsave(filename = "p1.png", width = 5.0, height = 3, plot = p1)
结果如下:
4、同样的方法得到 PDAC KRASi UP signature 结果
Note:注意字体大小有调整
################################################################################
# PDAC KRASi UP: 表格 PDAC_siKRAS_KRASi_iKras_UP
sig2 <- readxl::read_xlsx("data/science.adk0775_data_s4.xlsx", sheet = "PDAC_siKRAS_KRASi_iKras_UP")
head(sig2)
gene <- na.omit(sig2$external_gene_name)
head(gene)
## === 其他数据库通路富集
geneset <- read.gmt("data/c2.cp.reactome.v2024.1.Hs.symbols.gmt")
table(geneset$term)
geneset$term <- gsub(pattern = "REACTOME_","", geneset$term)
# 富集
my_path <- enricher(gene=gene, pvalueCutoff = 1, qvalueCutoff = 1, TERM2GENE=geneset)
dat <- my_path@result
dat <- dat[order(dat$p.adjust, decreasing = F),]
dat <- dat[1:10, ]
dat$Description <- factor(dat$Description, levels = dat$Description)
dat$xlab <- 1
head(dat)
colnames(dat)
# 字体大小
-log10(dat$p.adjust)*1.01
p2 <- ggplot(data = dat, aes(x = 1, y = rev(Description), colour = -log10(p.adjust))) +
geom_text(size=-log10(dat$p.adjust)*3, aes( label = Description), hjust = 0.5) + # hjust = 0.5,居中对齐
scale_color_gradient(low = "#dd8efb", high = "#b000f6") + # 创建颜色渐变
scale_x_continuous(expand = c(0,0)) + # 调整柱子底部与y轴紧贴
labs(x = " ", y = " ", title = "PDAC KRASi UP", color="Significance\n(-log10 adj. p-val.)") +
theme(axis.text = element_blank(), # 隐藏x/y轴标签
axis.ticks = element_blank(), # 隐藏x/y轴刻度
# 隐藏其他边框线
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
plot.background = element_rect(fill = "white", color = NA),
panel.background = element_rect(fill = "white", color = NA),
# 隐藏边框线
panel.border = element_blank(),
plot.title = element_text(hjust = 0.5) # 标题居中
) +
# 添加顶部横着的黑线
annotate("segment", x = 0, xend = 2, y = 10.5, yend = 10.5, color = "black", size = 1.1)
# 保存,这里的保存宽和高进行了调整,可以使得结果比较美观
ggsave(filename = "p2.png", width = 5.0, height = 3, plot = p2)
结果如下:
5、两个图片拼接在一起
第三个图就不绘制了,同样的技巧。这里将上面两个 signature 的结果拼在一起:
p <- p1 + p2
p
# 保存,这里的保存宽和高进行了调整,可以使得结果比较美观
ggsave(filename = "p1_p2.png", width = 10, height = 3, plot = p)
完美:
友情宣传: