BioF3 FigCode · SCI 绘图代码集

富集网络图(Enrichment Map)

导出日期:2026年6月27日

分类:功能富集 | 依赖包:ggplot2、igraph、ggraph

解决的生物学问题

富集到的几十条通路之间有没有冗余?能不能归成几个功能模块?

应用场景

输入数据格式

enrichResult 对象(经 pairwise_termsim 计算相似度后)

关键参数

快速开始

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 --- 标注的段落是示例数据生成代码。替换为自己的数据时,保持列名一致即可:

延伸阅读