个性化火山图来啦!小果带你绘制自己的无参转录组火山图






个性化火山图来啦!小果带你绘制自己的无参转录组火山图

小果  生信果  2024-05-01 19:00:20

各位小伙伴大家好啊,又到了每日的知识分享时间了哦,你们准备好了吗!
随着研究对象的不同,我们将组学研究分为了多种,但小果认为每种组学的分析内容可以统称为三步。一是测序并定量,将组学分析内容从生物层面转换成信息分析,当然,绝对定量和相对定量要根据具体的实验及经费进行考虑;二是进行注释分析,将已获得的高通量数据组装成转录本或是基因等相对具体组学而言的单体,并进行分析;三是差异分析,将对照组与实验组进行比较,对差异表达的基因或代谢物进行提取分类,对实验组的变化单元进行富集分析。
相对我们而言,第一步大多由公司完成,而关于第二步的富集分析内容效果已经在之前的分享内容中有所涉及,那么今天咱们就依据无参转录组数据讲解一下差异表达基因的确认以及利用火山图将其进行呈现。
火山图是一种用于可视化展示数据分布的图表类型,能帮助研究者快速识别数据中的异常值或特定模式,并比较不同数据集之间的差异,因此通常在组学分析时帮助展示差异蛋白或差异基因。
在这小果还要说一下,我们针对转录组数据进行分析时,往往会面临数据庞大、运算速度降低的问题,而解决方法往往是换一个性能更优的电脑,但也是解决了燃眉之渴,最好的方法还是需要利用服务器进行数据处理,如果大家没有自己的服务器,可以联系小果哦~



公众号后台回复“111”

领取本篇代码、基因集或示例数据等文件

文件编号:240430-1

需要租赁服务器的小伙伴可以扫码添加小果,此外小果还提供生信分析,思路设计,文献复现等,有需要的小伙伴欢迎来撩~

那咱们就开始今天的内容吧!
#调用包及载入数据library(ggrepel)library(tidyverse)library(ggplot2)    #这个函数的确能读入数据,但是通过dim函数可以发现该文件具有31338行和35列,而35列并不是我们全部需要的,可以在载入数据的时候进行数据筛选#dt <- read.delim('ArFvsArP_deg_all.xls')#View(dt)
#dim(dt)
#筛选数据dt <- read.delim('C:\Users\10395\Desktop\r画图教程\数据\1.9火山图\ArFvsArP_deg_all.xls') %>%  select(GeneID,ArP_readcount,ArF_readcount,log2FoldChange,pval) %>%  filter(ArP_readcount > 0 | ArF_readcount > 0) %>%  column_to_rownames(var = 'GeneID')#更改列名colnames(dt) <- c('arp','arf','logFC','Pval')head(dt)
#添加catogrey行,并对每一个基因的状态进行分类    dt$catogrey <- if_else(dt$logFC > 2 & dt$Pval<0.001,'up',        if_else(dt$logFC < -2 & dt$Pval<0.001,'down','normal'))head(dt)
此时,因为我们是无参转录组,所以我们筛选的规格更加严格,以|logFC| > 2且Pval<0.001为标准,是否为差异基因。
#获得catogrey的状态,以下是一样的效果dt %>% group_by(catogrey) %>% summarise(freq = n())#table(dt$catogrey)
#添加name行,为加标签方便dt$name <- rownames(dt)########开始进行火山图绘制# 简单火山图的绘制p1 <- ggplot(data = dt,             aes(x = logFC,                 y = -log10(Pval))) +  # 设置x轴为logFC,y轴为-P.Value的对数值  geom_point(alpha = 0.4, size = 2.5,                  aes(color = catogrey))           p1
#改变颜色p2 <- ggplot(data = dt,             aes(x = logFC,                 y = -log10(Pval))) +  # 设置x轴为logFC,y轴为-P.Value的对数值  geom_point(alpha = 0.4, size = 2.5,             aes(color = catogrey)) +      # 添加散点,根据change列着色  ylab("-log10(Pvalue)") +               # 设置y轴标签  scale_color_manual(values = c("blue4", "grey", "red3"))p2    
#增加区域划分并改变主题p3 <- ggplot(data = dt,            aes(x = logFC,                y = -log10(Pval))) +  # 设置x轴为logFCy轴为-P.Value的对数值  geom_point(alpha = 0.4, size = 2.5,             aes(color = catogrey)) +      # 添加散点,根据change列着色  ylab("-log10(Pvalue)") +               # 设置y轴标签  scale_color_manual(values = c("blue4", "grey", "red3")) +  # 设置颜色映射,蓝色表示下调,灰色表示稳定,红色表示上调  geom_vline(xintercept = c(-2, 2), lty = 4, col = "black", lwd = 0.8) +  # 添加垂直参考线,用于标记logFC阈值  geom_hline(yintercept = -log10(0.001), lty = 4, col = "black", lwd = 0.8) +   # 添加水平参考线,用于标记-P.Value阈值      theme_bw() + theme(panel.grid=element_blank())  # 使用网格白底主题p3
#########对符合筛选条件的基因添加标签#筛选上调中差异倍数最大的10个基因up_list <- dt %>%  filter(catogrey == 'up') %>%  distinct(name,.keep_all = T) %>%  #其实如果像是我这种没有具体的gene symbol的数据是不用这一步的  top_n(10,logFC)    head(up_list)
#筛选下调中差异倍数最大的10个基因down_list <- dt %>%  filter(catogrey == 'down') %>%  distinct(name,.keep_all = T) %>%  top_n(10,-logFC)head(down_list)
#对火山图添加标签P4 <- p3 + geom_text_repel(data = up_list, aes(x = logFC, y = -log10(Pval), label = name)) +  # 添加上调基因的标签  geom_text_repel(data = down_list, aes(x = logFC, y = -log10(Pval), label = name))  # 添加下调基因的标签P4    
#改变标签样式p5 <- p3 +  geom_label_repel(data = up_list, aes(x = logFC, y = -log10(Pval), label = name)) +  # 添加上调基因的标签  geom_label_repel(data = down_list, aes(x = logFC, y = -log10(Pval), label = name))p5   
 
但是由于我们这个数据较为集中会报warning,导致有的点不能被标记,因此我们采用重复标记的方式进行标记,以下是代码内容。
#大家可以看到,在进行以上标签时,的确会报warnning,但是#在对需要注释的点重新绘制点就不会出现这个错误p6 <- p3 +  # 基于普通火山图p  geom_point(data = up_list,                             # 上调数据集             aes(x = logFC, y = -log10(Pval)),             color = 'red3', size = 4.5, alpha = 0.2) +  # 三点颜色应与p3相同  geom_label_repel(data = up_list,                       # 添加标签                   aes(x = logFC, y = -log10(Pval), label = name),                       seed = 233,                           # 随机数种子,有过介绍哦                   size = 2.5,                           # 字体大小改变                   color = 'black',                      # 标签的字体颜色                   min.segment.length = 0,               # 是否始终添加引线                   force = 2,                            # 若标签重叠,则出现排斥                   force_pull = 2,                       # 标签与数据点间的吸引力,可以自己改变试一下                   box.padding = 0.4,                    # 标签周围空间                   max.overlaps = Inf) +                  # 保持始终显示所有标签  geom_point(data = down_list,                                         aes(x = logFC, y = -log10(Pval)),             color = 'blue4', size = 4.5, alpha = 0.2) +   geom_label_repel(data = down_list,                                        aes(x = logFC, y = -log10(Pval), label = name),                   seed = 233,                                             size = 2.5,                                           color = 'black',                                       min.segment.length = 0,                                 force = 2,                                              force_pull = 2,                                         box.padding = 0.4,                                      max.overlaps = Inf)                       p6
以上就是今天全部的代码内容,大家可以看到,我们使用火山图对差异基因进行了标记,并能在图中可以清楚地看到Cluster-11831.12437和Cluster-11831.30095分别是差异倍数最大的两个基因。同理,我们还可以用它来标记异常值或离群值,是差异表达或描述两种变量间关系的有利方式,大家快学起来吧!
各位小伙伴真的不想在数据可视化上花费太大时间,可以来小果的云生信平台哦,里面有大量成熟的可视化代码,只需要大家将数据输入就可以了哦,快来加入我们把!
http://www.biocloudservice.com/home.html

小果还提供思路设计、定制生信分析、文献思路复现;有需要的小伙伴欢迎直接扫码咨询小果,竭诚为您的科研助力!


定制生信分析

服务器租赁

扫码咨询小果


往期回顾

01

1024G存储的生信服务器,两人成团,1人免单!

02

单个数据库用腻了?多数据库“组合拳”带你打开免疫浸润新思路!

03

孟德尔随机化的准备工作,GWAS数据的网站下载方法

04

跟着小果学复现-手把手带你拿下IF=46.9Nature 级别的主成分分析(PCA)图!!