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

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

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

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

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

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

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

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

Gene Normal1 Normal2 Disease1 Disease2
GeneA 12.3 11.8 25.6 24.1
GeneB 8.7 9.2 3.1 2.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分别为3
  condition = 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 ±1和P-value < 0.05为显著差异阈值,可通过修改geom_vline和geom_hline的xintercept/yintercept参数自定义。

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

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

相关推荐
零基础1236 分钟前
深度强化学习驱动的 Agent 后训练:原理、实践与前沿路线
人工智能·python·机器学习
I Am a robert girl9 分钟前
PhysStream 源码级拆解:流式视频生成如何做到“边生成边控制“
python·音视频·源码解析·视频生成·可控生成·流式生成·物理控制
高洁0116 分钟前
数字孪生驱动大模型工业知识库
人工智能·python·深度学习·机器学习·transformer
RS迷途小书童20 分钟前
Python+FFmpeg提取大疆无人机MP4内嵌mov_text遥测SRT字幕并做完整性校验
python·ffmpeg·大疆·srt字幕·dji
幻影123!32 分钟前
AlphaZero 五子棋实战(番外二):白棋专项训练的一种方案
python·机器学习·强化学习·五子棋·alpha zero
头发够用的程序员36 分钟前
TensorRT 自定义算子插件实战(三):手搓 2×2 最大池化 customMaxpool
人工智能·pytorch·python·深度学习·神经网络·边缘计算·jetson
鬼手点金42 分钟前
opencode-crawl4ai使用建议
java·开发语言·人工智能·python·机器学习
海天一色y1 小时前
深入理解对偶单纯形法:原理推导与 Python/MATLAB 编程实现
python·matlab·最优化算法·对偶单纯形法
专业程序开发源1 小时前
springboot校园志愿者管理系统28562-计算机课程设计、毕业设计
java·spring boot·后端·python·django·php·课程设计
计算机毕业编程指导师1 小时前
计算机毕设怎么做?Python+Hadoop的跨平台消费者评论情感分析与数据可视化系统实战 源码 毕业设计 选题推荐 毕设选题 数据分析
大数据·hadoop·python·计算机·spark·课程设计·消费者评论