当前位置: 首页 > news >正文

R 语言绘制 10 种精美火山图:转录组差异基因可视化

在转录组 Bulk 测序数据分析中,差异基因的筛选与可视化是关键步骤,而火山图作为直观展示基因表达差异的工具,其美观度与信息传递效率直接影响分析结果的呈现质量。本文将分享 10 种基于 R 语言的火山图绘制方法,涵盖从数据准备到代码实战的完整流程,适用于不同场景下的差异基因可视化需求。

一、火山图的应用场景与价值

火山图通过横轴(log2 Fold Change)展示基因在两组样本中的表达差异倍数,纵轴(-log10 P-value)展示差异的统计学显著性,能快速区分显著上调、显著下调及无显著差异的基因。在期刊论文、项目汇报中,高质量的火山图不仅能清晰传递分析结果,更能提升内容的专业性与可读性。

二、数据准备:基因表达矩阵格式要求

绘制火山图的前提是正确的基因表达矩阵,需满足以下格式规范:

  • 第一列:基因名称(如 GeneSymbol);
  • 第二列及以后:各样本的基因表达值(FPKM、TPM 或 Counts 均可);
  • 第一行:样本名称(需按分组顺序排列,如 Normal 组在前,Disease 组在后)。

示例数据格式如下(简化版):

GeneNormal1Normal2Disease1Disease2
GeneA12.311.825.624.1
GeneB8.79.23.12.8

三、核心代码框架与使用说明

3.1 数据读取与预处理

首先需读取基因表达矩阵,代码中已内置差异基因分析流程(基于 DESeq2 或 edgeR 原理),无需额外预处理。核心读取代码如下:

# 读取基因表达矩阵(替换为你的文件路径)
data <- read.csv("gene_expression_matrix.csv", row.names = 1, check.names = FALSE)

3.2 样本信息配置

需根据实际样本分组情况配置样本信息,关键参数为each(每组样本数量),示例如下:

# 配置样本分组(Normal组与Disease组,需与表达矩阵列顺序一致)
sample_info <- data.frame(sample = colnames(data),# 若Normal组3个样本、Disease组3个样本,each分别为3condition = factor(rep(c("Normal", "Disease"), each = 3)) 
)

注意:表达矩阵样本顺序需与分组严格对应(如 Normal1、Normal2、...、Disease1、Disease2...),否则会导致差异分析结果错误。

四、10 种火山图风格及代码示例

以下为部分代表性风格的实现代码,完整 10 种风格可按需获取。所有代码基于 ggplot2 绘制,支持自定义颜色、标签及主题。

4.1 半透明密度风格

特点:通过密度轮廓线展示基因分布密度,点的半透明效果避免重叠遮挡,适合样本量较大的数据集。

# 半透明密度风格火山图
p6 <- ggplot(res_df, aes(x = log2FoldChange, y = log10p, color = sig)) +geom_point(alpha = 0.3, size = 2) +  # 点半透明,大小适中geom_density_2d(color = "black", alpha = 0.5) +  # 密度轮廓线scale_color_manual(values = c("dodgerblue", "grey", "firebrick")) +  # 下调、无差异、上调颜色geom_hline(yintercept = -log10(0.05), linetype = "dashed") +  # 显著性P值阈值线geom_vline(xintercept = c(-1, 1), linetype = "dashed") +  # 差异倍数阈值线labs(title = "Density Contour Style", x = "Log2 Fold Change", y = "-Log10(p-value)") +custom_theme  # 自定义主题(包含字体、背景等设置)
print(p6)

4.2 杂志封面风格

特点:通过点的大小映射 P 值显著性(P 值越小,点越大),配色沉稳专业,适合期刊配图。

# 杂志封面风格火山图
p7 <- ggplot(res_df, aes(x = log2FoldChange, y = log10p, color = sig, size = -log10(pvalue))) +geom_point(alpha = 0.7) +  # 适度透明,避免视觉拥挤scale_color_manual(values = c("#377eb8", "#999999", "#e41a1c")) +  # 期刊常用配色scale_size(range = c(1, 5)) +  # 点大小范围控制geom_hline(yintercept = -log10(0.05), linetype = "dashed") +geom_vline(xintercept = c(-1, 1), linetype = "dashed") +labs(title = "Magazine Cover Style", x = "Log2 Fold Change", y = "-Log10(p-value)") +custom_theme +theme(text = element_text(color = "black"))  # 确保文本清晰可见
print(p7)

4.3 荧光霓虹风格

特点:高对比度荧光配色,适合用于汇报展示,突出关键差异基因。

# 荧光霓虹风格火山图
p8 <- ggplot(res_df, aes(x = log2FoldChange, y = log10p, color = sig)) +geom_point(size = 2, alpha = 0.8) +scale_color_manual(values = c("#00ffff", "#555555", "#ff00ff")) +  # 霓虹蓝、灰色、霓虹粉geom_hline(yintercept = -log10(0.05), linetype = "dashed") +geom_vline(xintercept = c(-1, 1), linetype = "dashed") +labs(title = "Neon Glow Style", x = "Log2 Fold Change", y = "-Log10(p-value)") +custom_theme +theme(text = element_text(color = "black"))
print(p8)

五、关键参数调整与自定义技巧

1. 阈值调整:默认以log2FoldChange ±1P-value < 0.05为显著差异阈值,可通过修改geom_vlinegeom_hlinexintercept/yintercept参数自定义。

2. 基因标签添加:如需在图中标记关键基因(如 Top 10 上调 / 下调基因),可通过geom_textggrepel包实现,示例代码框架:

# 标记显著上调的Top5基因
top_up <- res_df %>% filter(sig == "up") %>% arrange(pvalue) %>% head(5)
p + geom_text(data = top_up, aes(label = Gene), size = 3, vjust = -1)

3. 图片保存:使用ggsave函数保存高清图片,支持 png、pdf 等格式:

ggsave("volcano_magazine_style.png", p7, width = 10, height = 8, dpi = 300)

六、总结

本文提供的 10 种火山图风格覆盖了期刊发表、汇报展示等多种场景,代码内置差异基因分析流程,无需额外预处理,仅需按实际数据格式调整参数即可快速使用。若在使用过程中遇到数据格式、样本分组或风格自定义问题,欢迎在评论区交流探讨。

http://www.dtcms.com/a/276102.html

相关文章:

  • JavaScript 常见10种设计模式
  • 码头智能哨兵:AI入侵检测系统如何终结废钢盗窃困局
  • Redis专题总结
  • MyBatis实现一对多,多对一,多对多查询
  • Golang操作MySQL json字段优雅写法
  • CPU缓存一致性协议:深入解析MESI协议与多核并发设计
  • HTML/JOSN复习总结
  • 7. JVM类加载器与双亲委派模型
  • PyQt5 — QTimeEdit 学习笔记
  • Java中的wait和notify、Condition接口的使用
  • 分类问题与多层感知机
  • pip国内镜像源一览
  • [es自动化更新] Updatecli编排配置.yaml | dockerfilePath值文件.yml
  • springboot+swagger2文档从swagger-bootstrap-ui更换为knife4j及文档接口参数不显示问题
  • 【高等数学】第三章 微分中值定理与导数的应用——第七节 曲率
  • DirectX Repair修复工具下载,.NET修复,DirectX修复
  • python 中 ‘5‘ 和 5 有什么本质区别?
  • 【深度学习】 1 Deep Learning
  • 12. JVM的垃圾回收器
  • LangChain 代理(Agents)学习
  • 网页五子棋-对战
  • python学习打卡:DAY 37 早停策略和模型权重的保存
  • web网站无法抓包排查;burp无法抓包情况
  • comfyUI-controlNet-线稿软边缘
  • c++中的STL
  • Day59
  • 智能制造——解读50页智能工厂系统集成总体解决方案【附全文阅读】
  • python学习打卡:DAY 40 训练和测试的规范写法
  • 深入详解:决策树在医学影像领域心脏疾病诊断的应用及实现细节
  • 苦练Python第9天:if-else分支九剑