首页 > 科研绘图 > 几行R语言代码即可绘制火山图?
2022
04-30

几行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

掌握几行代码,火山图轻松画!

快快行动起来,画出你的专属火山图!

转自:锐翌基因

最后编辑:
作者:萌小白
一个热爱网络的青年!

发布评论

表情