打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Bulk RNA-seq | 第6期. 火山图,不是你想的那样

本系列推送旨在带领生信零基础的科研人一起掌握Bulk RNA-seq数据分析,同时为其他Bulk组学和单细胞(核)转录组测序的数据分析奠定基础。

往期回顾

第1期. 快2024年了,还有必要学习Bulk RNA-seq?
第2期. 零基础画PCA图
第3期. 基因ID转换,一键搞定
第4期. 差异分析三巨头,该了解一下了
第5期. 关于热图,你所不知道的

今天我们来学习Bulk RNA-seq数据常用的一种数据可视化形式:火山图Volcano plot!与上期的框架相似,本期主要分享以下3个方面:

一、火山图的常见呈现形式?
二、为什么要用火山图(使用热图的常见目的)?
三、如何基于R生成火山图?

一、火山图的常见呈现形式?

虽然在文章中陆续看到过很多次火山图,但是如果真的要回答“火山图”有哪些常见的呈现形式,还真没那么简单。为此,我在CellPress官网中对近5年基于RNA-seq的火山图进行了检索。

然后开启手动筛选模式,(还在Nature Communication中筛选了一篇文章),最后汇总出下面一张图:

二、为什么要用火山图(使用火山图的常见目的)?

我们可以试想一下,我们在处理Bulk RNA-seq数据的时候,面对的是一个“样本-基因”矩阵,如下图:

“样本-基因”矩阵


在本系列推送的第4期(差异分析三巨头,该了解一下了),我们学习了基于上述矩阵进行差异分析,然后得到了下面的结果:

DEGs

那么问题来了:上面的表格中有7938个基因的差异分析结果,如何把这些结果通过一张图呈现出来呢?一个有用的方法就是火山图,对于火山图而言,最为重要的两个参数就是log2 (fold change)-log10 (adjusted P value),它们分别是火山图的横纵坐标(详细的说明,大家可以去B站“开心doctor”20220311日发布的一个视频“组学数据处理之火山图”。

结合第一部分汇总的火山图常见形式,我们基本可以推测出火山图常见的几个目的了:

1. 呈现组间差异基因的数量(包括上调和下调)

2.呈现组间关键的差异基因(不一定是最显著的,可以人为设置)

同时可以我们观察到:由于火山图的横纵坐标是确定的,所以其外观基本就确定了,但是仍然有勇于钻研的大神在“美化”方面做了改进,主要是配色方面,如颜色的选择以及设置渐变色。

三、如何基于R生成热图?

   下面将以“呈现组间关键的差异基因”为目的,展示基于R的实战过程。(想获得练习数据,可在公众号输入:Bulk RNA-seq练习数据4

1. 安装并加载R(如果没有安装过相关R包,需要先安装,再加载)

library(tidyverse)
library(ggrepel)
library(ggplot2)

2. 加载数据(2个数据,分别是样本-基因矩阵数据、差异分析结果)

##差异分析结果(我们上次的分享内容里有计算过程)
DEGs <- read.csv("./1.数据/Bulk RNA-seq练习数据4_DEGs_with_DESeq2.csv")

DEGs

3. 可视化

##3.1 设定阈值(FC和adjP)
threshold_log2FoldChange <- log2(2)
threshold_padj <- 0.05

##3.2 明确标签:标记自己挑选的差异基因(下面只是个例子)
gene_show <- c('NPPA', 'EGR1',"WNT9A","TUBA3E")
DEGs$label <- ifelse(DEGs$gene %in% gene_show, DEGs$gene, '')


##3.3 牢记ggplot的3大要素:数据、映射、几何图形

volcano <- ggplot(data = DEGs) +
#点
geom_point(aes(x = log2FoldChange,y = -log10(padj),color = log2FoldChange,size = -log10(padj))) +
#线
geom_vline(xintercept = c(-threshold_log2FoldChange,threshold_log2FoldChange), linetype = "dashed", color = "black", size = 0.2) +
geom_hline(yintercept = threshold_padj, linetype = "dashed", color = "black", size = 0.2) +
#标签
geom_text_repel(aes(x = log2FoldChange,y = -log10(padj),label = label),size = 2,
box.padding = unit(0.2,"lines"),point.padding = unit(0.3,"lines"),
segment.color = "black",show.legend = FALSE)+
#颜色
scale_color_gradientn(colours = c("#3288bd", "#66c2a5","#ffffbf", "#f46d43", "#9e0142"),
values = seq(0, 1, 0.2)) +
#scale_fill_gradientn(colours = c("#3288bd", "#66c2a5","#ffffbf", "#f46d43", "#9e0142"),values = seq(0, 1, 0.2)) +
#scale_color_continuous(low = '#08519c', high = '#de2d26')+
#scale_color_continuous(values = c('#08519c','grey','#de2d26'))+
#坐标轴
labs(x = "log2(FoldChange)",y = "-log10(adjusted P value)",title = paste0('Down = ',table(DEGs$change)[1] ,' Up = ',table(DEGs$change)[3])) +
#主题
theme_bw()+
theme(axis.text = element_text(size = 5,colour = 'black'),axis.title = element_text(size = 6), # 坐标轴标签和标题
plot.title = element_text(hjust = 0.5,size = 6,face = "bold"), # 标题
legend.text = element_text(size = 5),
legend.title = element_text(size = 6),
#legend.key.size = unit(0.1, "cm"),
legend.position = "right",
legend.background = element_blank(),
legend.key = element_blank(),
plot.margin = unit(c(0.5,0.5,0.5,0.5),"cm"))

想跟更多的生信人一起交流,请进入下方“R语言与组学交流群”。

期待已久~|医学基础科研互助交流群来啦!

(欢迎大家入群交流~

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
RNA-seq结果图片如何解读?(第一弹)
RNA-seq入门实战(五):差异分析——DESeq2 edgeR limma的使用与比较
火山图(Volcano Plot)
R语言学习 - 火山图
用R画火山图的几种方法
7+非肿瘤纯生信套路,单细胞+Bulk分析不愁发不了高分!
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服