ggplot2应用(二)——火山图绘制(volcano plot
2021-09-17 本文已影响0人
Bio_Infor
火山图(volcano plot)是散点图的一种,它将统计学中的显著性度量和变化幅度相结合,从而能够帮助我们快速直观地识别那些变化幅度较大且具有统计学意义的对象。本篇文章将简单介绍应用ggplot2进行火山图的绘制,当然这肯定是不够放在文章上面的,相关的细节调整还需要进行个性化的学习。
前面提到火山图可以将统计学中的显著性度量和变化幅度相结合,这里的显著性度量为相应的统计学检验的置信度参数,例如t检验;而变化幅度一般呈现为比例,即fold change。但是我们一般在进行火山图的绘制时会对这两个值进行相应的转换:将显著性度量参数P-Value转换为-log10(P_Value),将变化幅度fold change转换为log2(fold_change)。同时,Adjust P_Value为数据显著性参数,这个值来自于对P_Value的校正,防止出现假阳性和假阴性,我们一般会使用Adjust P_Value而不是P_Value。这样的转换使得这两个值越大,相应的对象也就差异越显著。
本次的测试数据可通过留言获取,这里仅展示部分:
#设置工作目录并读取数据
setwd('C:/Users/DELL/Desktop')
data <- read.table(file = 'test.txt',sep = ' ',header = T)
data
测试数据.png
可以看到,这个数据当中log2(fold_change)已经天然存在,Adjust P_Value也已经存在,只不过需要我们进行-log10的转换。
library(ggplot2)
library(ggrepel)
#对原数据进行处理
data$padj <- -log10(data$padj)
data <- data[,-3]
colnames(data) <- c('gene','log_FC','-log10_P_Value')
#设置阈值
logFC_cutoff <- log2(1.5)
log10_P_Value_cutoff <- -log10(0.05)
绘制火山图:
plot1 <- ggplot(data = data,aes(x = log_FC,y = `-log10_P_Value`))+
geom_point(data = subset(data,abs(log_FC)<logFC_cutoff),
aes(size = abs(log_FC)),col = 'gray',alpha = 0.4)+
geom_point(data = subset(data,abs(`-log10_P_Value`)<log10_P_Value_cutoff & abs(log_FC)>logFC_cutoff),
aes(size = abs(log_FC)),col = 'gray',alpha = 0.4)+
geom_point(data = subset(data,abs(`-log10_P_Value`)>log10_P_Value_cutoff & log_FC>logFC_cutoff),
aes(size = abs(log_FC)),col = 'red',alpha = 0.4)+
geom_point(data = subset(data,abs(`-log10_P_Value`)>log10_P_Value_cutoff & log_FC< -logFC_cutoff),
aes(size = abs(log_FC)),col = 'darkgreen',alpha = 0.4)+
theme_bw()+
theme(legend.title = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position = 'none',
axis.line = element_line(colour = "black"))+
labs(x='log2(fold change)',y='-log10(adjusted p-value)')+
geom_vline(xintercept = c(-logFC_cutoff,logFC_cutoff),lty = 3,col = 'black',lwd = 0.4)+
geom_hline(yintercept = log10_P_Value_cutoff,lty = 3,col = 'black',lwd = 0.4)
注意,在这里我们的绘制思路稍显不同,我们是充分利用了ggplot2的图层优势,将整个图分成了四个部分进行绘制(就是4个geom_point()),这是非常有用的。同时我们也通过labs()函数个性化调整了横纵坐标的名称。最后通过geom_vline()和geom_hline()添加了横竖线。最终成图如下:
当然,我们也可以通过调用ggrepel包进行标签的添加,这里我们把表达差异显著基因进行标签的添加:
plot1 + geom_text_repel(data = subset(data,abs(`-log10_P_Value`)>log10_P_Value_cutoff & abs(log_FC)>logFC_cutoff),
aes(label = gene),size = 5,col = 'black')
最终成图如下:
plot2.png
今天又是摸鱼的一天!