如何绘制带分组名称标注的GSEA图?现有工具未生成目标图
绘制目标GSEA图的可行方法
如果你用fgsea和gggsea都没能复现目标样式的GSEA图,可以试试以下两种方案:
1. 基于fgsea+ggplot2自定义绘图
fgsea包的分析结果包含了绘制GSEA图所需的全部核心数据,你可以手动提取后用ggplot2分图层构建出目标图:
- 先完成fgsea富集分析,拿到结果对象
- 提取目标通路的
leadingEdge基因,以及基因排序后的位置信息 - 计算富集得分(ES)的累积变化,构建曲线数据
- 分图层绘制基因标记点、ES曲线,再添加通路信息标注
示例代码:
library(fgsea) library(ggplot2) # 假设已准备好通路集合pathways和基因排序向量gene_ranks fgsea_res <- fgsea(pathways = pathways, stats = gene_ranks, nperm = 1000) # 筛选你要绘制的目标通路 target_res <- fgsea_res[fgsea_res$pathway == "你的目标通路名称", ] # 构建富集得分曲线数据 es_values <- cumsum(ifelse(names(gene_ranks) %in% target_res$leadingEdge, 1/(length(gene_ranks) - length(target_res$leadingEdge)), -1/length(target_res$leadingEdge))) es_df <- data.frame(pos = 1:length(gene_ranks), es = es_values) # 构建富集基因位置数据 gene_pos_df <- data.frame(pos = which(names(gene_ranks) %in% target_res$leadingEdge)) # 绘制图形 ggplot() + # 底部富集基因标记点 geom_point(data = gene_pos_df, aes(x = pos, y = 0), color = "#ff0000", size = 0.6) + # 富集得分折线 geom_line(data = es_df, aes(x = pos, y = es), color = "#0000ff", linewidth = 1) + # 顶部通路信息标注 annotate("text", x = median(es_df$pos), y = max(es_df$es) * 1.1, label = paste0(target_res$pathway, "\nNES: ", round(target_res$NES, 2), "\np-value: ", round(target_res$pval, 4)), size = 4, fontface = "bold") + # 调整主题样式 theme_minimal() + labs(x = "Gene Rank", y = "Enrichment Score") + theme(axis.text = element_text(size = 10), axis.title = element_text(size = 12, face = "bold"))
2. 使用clusterProfiler的gseaplot2函数
clusterProfiler包的gseaplot2()支持灵活调整GSEA图的样式,通过参数可以匹配目标图的布局:
- 设置
subplots = c(1,2)可以同时显示基因标记和ES曲线 - 用
color参数调整曲线和标记点颜色 - 通过
title参数添加通路及统计信息标注
示例代码片段:
library(clusterProfiler) # 假设已完成GSEA分析得到gsea_res对象 gseaplot2(gsea_res, geneSetID = "你的目标通路名称", subplots = c(1,2), color = "blue", title = paste0("通路名称\nNES: 1.87, p-value: 0.023"))
内容的提问来源于stack exchange,提问作者user2110417
相关产品推荐
相关产品推荐

