本系列推送旨在带领生信零基础的科研人一起掌握Bulk RNA-seq数据分析,同时为其他Bulk组学和单细胞(核)转录组测序的数据分析奠定基础。
往期回顾
今天我们来学习Bulk RNA-seq数据常用的一种数据可视化形式:火山图Volcano plot!与上期的框架相似,本期主要分享以下3个方面:
一、火山图的常见呈现形式?
虽然在文章中陆续看到过很多次火山图,但是如果真的要回答“火山图”有哪些常见的呈现形式,还真没那么简单。为此,我在CellPress官网中对近5年基于RNA-seq的火山图进行了检索。
二、为什么要用火山图(使用火山图的常见目的)?
我们可以试想一下,我们在处理Bulk RNA-seq数据的时候,面对的是一个“样本-基因”矩阵,如下图:
“样本-基因”矩阵
在本系列推送的第4期(差异分析三巨头,该了解一下了),我们学习了基于上述矩阵进行差异分析,然后得到了下面的结果:
DEGs
结合第一部分汇总的火山图常见形式,我们基本可以推测出火山图常见的几个目的了:
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")
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语言与组学交流群”。
期待已久~|医学基础科研互助交流群来啦!
(欢迎大家入群交流~
联系客服