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

别再手动调图了!用R语言ggplot2一键绘制TBtools GO富集分析结果(附完整代码)

告别手动调图:用R语言ggplot2自动化处理TBtools GO富集分析结果

每次做完GO富集分析,最头疼的就是调整图表样式了吧?从TBtools导出的数据要手动整理、反复调试ggplot2参数,一个图表可能要花上大半天时间。作为过来人,我完全理解这种痛苦——明明分析结果很有价值,却卡在数据可视化这个环节。

今天分享的这套R脚本,能帮你把TBtools的GO富集结果直接转化为发表级的柱状图和气泡图。不需要理解每个参数的含义,只需要替换文件路径,运行代码就能得到专业美观的图表。特别适合需要快速产出论文图表的研究生和生物信息学工作者。

1. 准备工作与环境配置

在开始之前,我们需要确保R环境中安装了必要的包。如果你之前没有使用过ggplot2,现在就是安装的好时机。打开RStudio或你喜欢的R环境,运行以下命令:

# 安装必要包(如果尚未安装) install.packages(c("ggplot2", "dplyr", "RColorBrewer")) # 加载包 library(ggplot2) library(dplyr) library(RColorBrewer)

将TBtools生成的GO富集结果文件(通常是"GO.Enrichment.final.txt"这样的文本文件)放在一个容易找到的目录下。建议为每个项目创建独立的工作目录,避免文件混乱。

提示:TBtools输出的文件默认是制表符分隔的文本文件,确保在导入R时指定sep="\t"参数。

2. 数据导入与预处理

数据预处理是可视化前的关键步骤。我们需要从TBtools输出中提取有意义的信息,并计算必要的统计量。以下代码会自动处理这些步骤:

# 设置工作目录(替换为你的实际路径) setwd("D:/your_project/GO_analysis/") # 导入TBtools输出数据 go_data <- read.table("GO.Enrichment.final.txt", sep = "\t", header = TRUE, stringsAsFactors = FALSE, check.names = FALSE) # 计算GeneRatio和BgRatio go_data <- go_data %>% mutate(GeneRatio = HitsGenesCountsInSelectedSet / AllGenesCountsInSelectedSet, BgRatio = HitsGenesCountsInSelectedSet / AllGenesCountsInBackground, logPval = -log10(`corrected p-value(BH method)`))

数据预处理完成后,我们可以按GO类别(生物过程、细胞组分、分子功能)进行分组和筛选:

# 按GO类别筛选显著结果(p.adj < 0.05) bp_data <- go_data %>% filter(Class == "Biological process", `corrected p-value(BH method)` < 0.05) %>% arrange(`corrected p-value(BH method)`) cc_data <- go_data %>% filter(Class == "Cellular component", `corrected p-value(BH method)` < 0.05) %>% arrange(`corrected p-value(BH method)`) mf_data <- go_data %>% filter(Class == "Molecular function", `corrected p-value(BH method)` < 0.05) %>% arrange(`corrected p-value(BH method)`) # 合并数据并设置因子水平 plot_data <- rbind(bp_data, cc_data, mf_data) %>% mutate(GO_Name = factor(GO_Name, levels = unique(GO_Name)))

3. 一键生成发表级柱状图

柱状图是展示GO富集结果最常用的形式之一。下面的代码会生成一个专业美观的柱状图,自动处理了颜色、标签、图例等细节:

# 自定义颜色方案 go_colors <- c("Biological process" = "#4DAF4A", "Cellular component" = "#377EB8", "Molecular function" = "#E41A1C") # 生成柱状图 go_barplot <- ggplot(plot_data, aes(x = GO_Name, y = logPval, fill = Class)) + geom_bar(stat = "identity", width = 0.7) + scale_fill_manual(values = go_colors) + labs(x = "GO Terms", y = expression(-log[10]("p.adj")), title = "GO Enrichment Analysis") + theme_minimal(base_size = 12) + theme( axis.text.x = element_text(angle = 45, hjust = 1, size = 10), axis.text.y = element_text(size = 10), axis.title = element_text(size = 12, face = "bold"), legend.position = "top", legend.title = element_blank(), panel.grid.major = element_line(color = "grey90"), panel.grid.minor = element_blank(), plot.title = element_text(hjust = 0.5, face = "bold") ) # 保存图表 ggsave("GO_barplot.pdf", go_barplot, width = 10, height = 6, dpi = 300)

这段代码会自动:

  • 为不同GO类别分配不同颜色
  • 调整坐标轴标签角度避免重叠
  • 添加适当的标题和轴标签
  • 优化图例位置和样式
  • 以高分辨率保存PDF文件

4. 创建信息丰富的富集气泡图

气泡图能同时展示多个维度的信息,是GO富集分析的另一经典可视化方式。下面的代码会生成一个专业的气泡图:

# 生成气泡图 go_bubble <- ggplot(plot_data, aes(x = GeneRatio, y = GO_Name, size = HitsGenesCountsInSelectedSet, color = logPval)) + geom_point(alpha = 0.8) + scale_size(range = c(3, 8), name = "Gene Count") + scale_color_gradient(low = "blue", high = "red", name = expression(-log[10]("p.adj"))) + facet_grid(Class ~ ., scales = "free_y", space = "free_y") + labs(x = "Gene Ratio", y = "GO Terms", title = "GO Enrichment Bubble Plot") + theme_bw(base_size = 12) + theme( strip.text.y = element_text(angle = 0, size = 10, face = "bold"), strip.background = element_rect(fill = "grey90"), axis.text.x = element_text(size = 10), axis.text.y = element_text(size = 9), axis.title = element_text(size = 12, face = "bold"), legend.title = element_text(size = 10), legend.text = element_text(size = 9), panel.grid.minor = element_blank(), plot.title = element_text(hjust = 0.5, face = "bold") ) # 保存图表 ggsave("GO_bubble.pdf", go_bubble, width = 10, height = 8, dpi = 300)

这个气泡图的特点包括:

  • 气泡大小代表富集到的基因数量
  • 气泡颜色代表富集显著性(-log10 p.adj)
  • 按GO类别分面展示,便于比较
  • 自动调整y轴空间,优化布局

5. 高级定制与常见问题解决

虽然上面的代码已经可以生成发表级的图表,但你可能还需要根据具体需求进行调整。以下是一些常见场景的解决方案:

5.1 控制显示的GO条目数量

有时结果中GO条目太多,图表会显得拥挤。可以限制每个类别显示的条目数量:

# 每个类别只显示前10个最显著的结果 top_go <- plot_data %>% group_by(Class) %>% top_n(-10, `corrected p-value(BH method)`) %>% ungroup()

5.2 调整图表尺寸适应长GO名称

某些GO术语名称很长,可能导致标签重叠。可以通过调整图表尺寸解决:

# 对于特别长的GO名称,增加图表高度 ggsave("GO_barplot_long_names.pdf", go_barplot, width = 12, height = 10, dpi = 300)

5.3 修改颜色方案

如果不喜欢默认颜色,可以轻松更换:

# 使用RColorBrewer的Set2配色方案 new_colors <- brewer.pal(3, "Set2") names(new_colors) <- c("Biological process", "Cellular component", "Molecular function")

5.4 处理极端p值

有时会遇到极显著的p值,导致y轴范围不合理:

# 限制y轴最大值为10 go_barplot + ylim(0, 10)

6. 完整代码整合与一键执行

为了真正实现"一键出图",我们可以将所有代码整合到一个R脚本中。创建一个名为"GO_visualization.R"的文件,包含以下内容:

# GO富集结果可视化自动化脚本 # 输入:TBtools生成的GO.Enrichment.final.txt # 输出:柱状图和气泡图PDF文件 # 1. 加载包 library(ggplot2) library(dplyr) library(RColorBrewer) # 2. 设置工作目录和输入文件 setwd("D:/your_project/GO_analysis/") input_file <- "GO.Enrichment.final.txt" # 3. 数据导入与预处理 go_data <- read.table(input_file, sep = "\t", header = TRUE, stringsAsFactors = FALSE, check.names = FALSE) %>% mutate(GeneRatio = HitsGenesCountsInSelectedSet / AllGenesCountsInSelectedSet, BgRatio = HitsGenesCountsInSelectedSet / AllGenesCountsInBackground, logPval = -log10(`corrected p-value(BH method)`)) # 4. 按类别筛选和排序 plot_data <- go_data %>% filter(`corrected p-value(BH method)` < 0.05) %>% group_by(Class) %>% arrange(`corrected p-value(BH method)`) %>% slice_head(n = 15) %>% # 每个类别最多显示15条 ungroup() %>% mutate(GO_Name = factor(GO_Name, levels = unique(GO_Name))) # 5. 定义颜色方案 go_colors <- c("Biological process" = "#4DAF4A", "Cellular component" = "#377EB8", "Molecular function" = "#E41A1C") # 6. 生成柱状图 go_barplot <- ggplot(plot_data, aes(x = GO_Name, y = logPval, fill = Class)) + geom_bar(stat = "identity", width = 0.7) + scale_fill_manual(values = go_colors) + labs(x = "GO Terms", y = expression(-log[10]("p.adj"))) + theme_minimal(base_size = 12) + theme(axis.text.x = element_text(angle = 45, hjust = 1), legend.position = "top", legend.title = element_blank()) # 7. 生成气泡图 go_bubble <- ggplot(plot_data, aes(x = GeneRatio, y = GO_Name, size = HitsGenesCountsInSelectedSet, color = logPval)) + geom_point(alpha = 0.8) + scale_size(range = c(3, 8)) + scale_color_gradient(low = "blue", high = "red") + facet_grid(Class ~ ., scales = "free_y", space = "free_y") + labs(x = "Gene Ratio", y = "GO Terms") + theme_bw() # 8. 保存图表 ggsave("GO_barplot.pdf", go_barplot, width = 10, height = 7) ggsave("GO_bubble.pdf", go_bubble, width = 10, height = 8)

要使用这个脚本,你只需要:

  1. 修改setwd()中的路径为你的项目目录
  2. 确保TBtools输出文件命名为"GO.Enrichment.final.txt"或相应修改input_file
  3. 运行整个脚本

图表将自动保存为PDF文件,可以直接插入到论文或报告中。

http://www.cnnetsun.cn/news/2878628.html

相关文章:

  • PyTorch实战:手把手教你复现GoogleNet的Inception模块(附完整代码)
  • 加密货币市场情绪极端性对定价效率的影响研究
  • Cherry MX键帽3D打印终极指南:36种规格完整建模与个性化定制教程
  • Mentor许可证使用规定与条款
  • FanControl终极教程:5步配置Windows风扇智能控制系统
  • 云原生 AI 平台:Kubernetes 智能调度器如何让 GPU 利用率翻倍
  • P89C66x单片机ISP/IAP与硬件I2C功能深度解析与应用实战
  • GripperControl.cs 完整解析
  • AI 已经会写代码了,但它还不太会“交付”
  • 从零到一:我的ISP图像调试工程师成长手记
  • SSM架构学生信息管理系统:含可运行WAR包、MySQL脚本与16张真实界面截图
  • 5分钟打造专业级音乐播放器:foobar2000终极美化方案深度解析
  • 深入解析P89LPC912/913/914:80C51内核的低功耗与时钟系统实战
  • AI Coding 笔试:思路 + 提示词
  • 小程序毕设项目:基于springboot+微信小程序的电子元器件商城 (源码+文档,讲解、调试运行,定制等)
  • SolidWorks C#插件开发一键启动包:含事件响应、UI窗体与模型操作封装
  • 消灭AI“适配地狱”—— 让AI开发回归业务本质
  • 从KF到ESKF:五大滤波算法核心思想与工程选型指南
  • 别再手动重复造轮子了!用C#/Python为PowerMill打造你的专属自动化工具库
  • 统计一月工作时长后顿悟:打字,才是当代职场人的头号效率黑洞
  • VRCX:重新定义VRChat社交管理的智能伴侣
  • 智能图像分层革命:layerdivider如何5分钟将单图变多层的设计神器
  • 085、ISP 寄存器调试入门:从 ISP 厂商手册到寄存器读写工具的调试方法论
  • 别再到处找离线地图了!用高德JS API 2.0 + Vue3 动态获取行政区划GeoJSON数据
  • Python 3.14.6 和 3.13.14 发布:约 400 处改进,3.14 系列带来多项新特性!
  • AI 是不是已经贵到无法替代我们?
  • MSC7119 DSP芯片架构解析与嵌入式系统设计实战指南
  • Nginx配置文件详解【20260611】005篇
  • Qt项目直接调用的NC气象数据读取C++封装库(含netCDF-3/4支持)
  • 【Android】Hilt 依赖注入:原理与最佳实践