BioF3 FigCode · SCI 绘图代码集
富集网络图(Enrichment Map)
分类:功能富集 | 依赖包:ggplot2、igraph、ggraph
解决的生物学问题
富集到的几十条通路之间有没有冗余?能不能归成几个功能模块?
应用场景
- GO/KEGG 富集结果去冗余展示
- 识别功能模块(如"免疫相关"聚团)
- GSEA 结果的通路关系可视化
- 文章 figure 展示富集全景
输入数据格式
enrichResult 对象(经 pairwise_termsim 计算相似度后)
关键参数
- pairwise_termsim() 计算相似度矩阵
- showCategory 展示通路数(20-50)
- layout 网络布局(默认 nicely)
- cluster 是否按模块着色
快速开始
1. 直接在线运行
打开 FigCode 在线绘图,点击本工具卡片的"在线绘图"按钮即可用内置示例数据出图,零环境配置。
2. 本地复现
下载脚本和示例数据,本地 RStudio 运行:
# 下载
curl -O https://<your-site>/figcode/scripts/go-emap.R
curl -O https://<your-site>/figcode/data/go-emap.csv
3. 安装依赖
# CRAN 包
install.packages(c("ggplot2", "igraph", "ggraph"))
# Bioconductor 包(如需)
# BiocManager::install(c())
完整代码
library(ggplot2)
library(igraph)
library(ggraph)
# --- Demo: simulate enrichment map ---
set.seed(42)
n_terms <- 25
terms <- paste0("GO:", sprintf("%07d", sample(1e6, n_terms)))
labels <- paste("Process", LETTERS[1:n_terms])
# Simulate pairwise similarity (Jaccard-like)
sim_mat <- matrix(0, n_terms, n_terms)
for (i in 1:(n_terms-1)) {
for (j in (i+1):n_terms) {
# Create 3 clusters of related terms
same_cluster <- (ceiling(i/8) == ceiling(j/8))
sim_mat[i,j] <- sim_mat[j,i] <- ifelse(same_cluster, runif(1, 0.2, 0.7), runif(1, 0, 0.1))
}
}
# Build network from similarity > threshold
threshold <- 0.15
edges <- which(sim_mat > threshold, arr.ind = TRUE)
edges <- edges[edges[,1] < edges[,2], ]
edge_df <- data.frame(from = labels[edges[,1]], to = labels[edges[,2]],
weight = sim_mat[edges])
g <- graph_from_data_frame(edge_df, directed = FALSE, vertices = data.frame(name = labels))
V(g)$pvalue <- runif(n_terms, 1e-8, 0.05)
V(g)$size <- -log10(V(g)$pvalue)
V(g)$cluster <- ceiling(1:n_terms / 8)
# --- Plot ---
ggraph(g, layout = "fr") +
geom_edge_link(aes(width = weight), alpha = 0.3, color = "grey60") +
geom_node_point(aes(size = size, color = factor(cluster))) +
geom_node_text(aes(label = name), repel = TRUE, size = 2.5, max.overlaps = 12) +
scale_edge_width(range = c(0.3, 2), guide = "none") +
scale_size_continuous(range = c(3, 10), name = "-log10(p)") +
scale_color_brewer(palette = "Set2", name = "Module") +
labs(title = "Enrichment Map (GO-BP)") +
theme_void()
替换为自己的数据
脚本中以 # --- Demo data --- 标注的段落是示例数据生成代码。替换为自己的数据时,保持列名一致即可:
- 输入格式:enrichResult 对象(经 pairwise_termsim 计算相似度后)
- 使用
read.csv()/readRDS()读取本地文件
延伸阅读
- 相关教程:富集网络图 完整流程
- 出现 bug?欢迎在 FigCode 页面 点击对应卡片,在评论区留言。