速绘 丨 GO富集气泡图
本期分享一个快速绘制GO富集结果图的方法,主要使用R语言tidyverse包,只需导入数据即可一步出图,可以自定义显示的数目、颜色、筛选参数,从此以后绘制GO富集图只需1秒。
前言介绍
下面是一个GO富集分析的结果数据表:
- ID:表示具体的GO条目
- Description:GO条目的描述
- RatioF:分子是富集到这个GO条目上的gene的数目, 分母是所有输入的做富集分析的gene的数目
- RatioB:分母是所有编码蛋白的基因中有GO注释的gene的数目,分子是注释到这个GO条目上面的gene数目
- pvalue:富集的p值
- p.adjust:校正之后的p值
通过以上数据可以绘制如下的气泡图,还可以进一步根据结果分成三类:
- BP: biological process, 生物学过程
- MF: molecular function, 分子功能
- CC: cellular component, 细胞成分下面开始正式的绘图方法原理介绍
绘图方法
加载数据与参数
# 本脚本用于对TGT生成的GO结果作图 library(tidyverse) rm(list=ls()) # 设置项目基本信息 file <- "GO-Table20230629105106.csv" #数据文件名 job <- "20230629" #项目名称 out_info_num <- 30 #最大显示条目数 my_pvalue <- 1 #p值筛选条件 my_number <- 0 #数量筛选条件 color_1 <- c("blue","red") #颜色
将数据导入df变量中,然后修改colnames,使用管道操作符%>%
对数据框进行筛选。首先,根据"Pvalue"列的值小于my_pvalue变量的值,保留满足条件的行。然后,继续筛选,仅保留"Number"列的值大于my_number变量的值的行。最终,经过筛选后的结果会存储回df数据框中。
df <- read.csv(file,header = T) colnames(df) <- c("ID", "Description", "RatioF", "RatioB", "Pvalue", "FDR", "Number", "Group", "Gene") df$Description <- factor(df$Description) df <- df %>% filter(Pvalue < my_pvalue) %>% filter(Number > my_number)
数据转换
调用分数转小数的函数,mixedToFloat
相关介绍请见上一篇文章。
df$RatioF <- mixedToFloat(df$RatioF) df$RatioB <- mixedToFloat(df$RatioB)
首先,根据"RatioF"列的值对df进行升序排序,并将结果存储在df_plot中。
然后,从df_plot中提取"Description"列的唯一值,并将其存储在leve_des变量中。
接下来,将df_plot中的"Description"列转换为因子类型,并按照leve_des中的顺序设置水平值(levels)。
随后,从df_plot中保留前out_info_num行的数据,并将结果重新赋值给df_plot。这样就实现了对df_plot的行数限制。
最后,使用管道操作符%>%对df_plot进行操作,将所有含有缺失值的行删除,并将结果重新赋值给df_plot。
df_plot <- df[order(df$RatioF),] leve_des <- unique(df_plot$Description) df_plot$Description <- factor(df_plot$Description,levels = leve_des) df_plot <- df_plot[1:out_info_num,] df_plot <- df_plot %>% drop_na()
另外,需要对Group列进行替换,生成新的分类标注信息“MF”,“CC”,“BP”
# 使用mutate函数替换Group列的值 df_plot <- df_plot %>% mutate(Group = case_when( Group == "molecular_function" ~ "MF", Group == "cellular_component" ~ "CC", Group == "biological_process" ~ "BP", TRUE ~ Group ))
绘制图像
接下来,使用ggplot2绘制气泡图:
ggplot(df_plot)+ geom_point(aes(RatioF,Description, color = Pvalue, size = Number))+ labs(x="GeneRatio",y="GO description") + labs(title="")+ scale_color_gradient(low = color_1[1],high=color_1[2],name="Pvalue")+ theme_bw()+ facet_grid("Group",scales = "free_y",space = "free_y") ggsave(str_c("Fig_GO_plot_",job,".pdf"), width = 8,height = 8)
首先,使用geom_point函数在散点图中绘制数据点。散点的x轴表示RatioF,y轴表示Description。点的颜色基于Pvalue列的值,大小基于Number列的值。
接下来,使用labs函数设置x轴和y轴的标签文本,以及图表的标题。
然后,使用scale_color_gradient函数设置Pvalue颜色的渐变范围,并命名为"Pvalue"。调用theme_bw函数将图表的主题样式设置为黑白。
最后,使用facet_grid函数创建一个分面图,根据"Group"列的值将图表分为多个子图。scales参数设置y轴的刻度尺和标签自由缩放,space参数设置y轴的间距。
最终,使用ggsave函数将生成的图表保存为PDF文件,文件名由"Fig_GO_plot_"、job和".pdf"拼接而成,指定了输出文件的宽度和高度。
参考资料: https://zhuanlan.zhihu.com/p/383654316 http://wheat.cau.edu.cn/TGT/m.html?navbar=GOEnrichment
“速绘”系列专注于分享便捷实用的作图脚本,低代码实现精美科研作图。主打的就是可重复使用,换套数据一行代码即可出图!本篇文章的绘图脚本已上传至后台,回复“GO29”即可获得。