几行R语言代码即可绘制火山图?
卖萌控的博客
点击这里进入电脑版页面!体验更好
几行R语言代码即可绘制火山图?
2022-4-30 萌小白


火山图(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






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



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


转自:锐翌基因
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容