几行R语言代码即可绘制火山图?
火山图
火山图(volcano plot)常用于显著差异基因表达的展示,包含显著和差异两个重要信息。显著性指P值小于0.05,差异性常用FoldChange值>=2作为筛选标准。
那么如何看懂一张火山图所包含的信息呢?首先需要知道,火山图的横坐标通常用log2(fold change)表示,差异越大的基因分布在两端,纵坐标用-log10(pvalue)表示,T检验显著性P值的负对数。由于P值越小表示越显著,所以我们进行-log10(P value)转化后,转化值越大表示差异越显著。通常差异倍数越大的基因T检验越显著,所以左上角和右上角的值往往是我们关注的。
求教要怎么画火山图呢?
小锐今天将为大家介绍如何用R语言绘制火山图。
1.加载数据
temp <- read.table("data.txt",header = T,check.names = F,quote="",sep = "t")
head(temp)
> 查看基因表达数据,包含P值和倍数值,因火山图展示需要,将倍数值进行了Log2转化。
2.绘制火山图
2.1初级版火山图
library("ggplot2")
p<-ggplot(temp,aes(x=temp$log_foldchange,y=-log10(temp$p_value)))+xlab("log2 Fold Change")+ylab("-log10P-Value")+
geom_point(size=4,alpha=0.6)
p
2.2进阶版火山图
为方便直观的显示基因表达的上调与下调,我们设置筛选阈值,并依此设置点的颜色。
这里我们设置P<0.05且log(foldchange)>0为上调(“up”),P<0.05且log(foldchange)<0为下调(“down”)。
temp$threshold[temp$p_value < 0.05 & temp$log_foldchange>0 ] = "up"
temp$threshold[temp$p_value < 0.05 & temp$log_foldchange<0 ] = "down"
temp$threshold[temp$p_value > 0.05 & (temp$log_foldchange>=0 | temp$log_foldchange <= 0)] = "non"
p<-ggplot(temp,aes(x=temp$log_foldchange,y=-log10(temp$p_value),colour=threshold))+xlab("log2 Fold Change")+ylab("-log10P-Value")+
geom_point(size=4,alpha=0.6)+
scale_color_manual(values =c("#0072B5","grey","#BC3C28")) #设置点的颜色
p
这样绘制出来的火山图是不是更加直观,更美观了?最后让我们来修饰细节。
2.3终极版火山图
调整图片细节,为火山图去除背景并增加区域线:
library(ggthemes)
p<-ggplot(temp,aes(x=temp$log_foldchange,y=-log10(temp$p_value),colour=threshold))+xlab("log2 Fold Change")+ylab("-log10P-Value")+
geom_point(size=4,alpha=0.6)+
scale_color_manual(values =c("#0072B5","grey","#BC3C28")) +
geom_hline(aes(yintercept=-log10(0.05)),colour="grey",size=1.2 ,linetype=2) + #增加水平间隔线
geom_vline(aes(xintercept=0), colour="grey",size=1.2 ,linetype=2)+ #增加垂直间隔线
theme_few()+theme(legend.title = element_blank()) #去掉网格背景和图注标签
p
供稿:谭迪
编辑:鲁淑妮