火山图(Volcano plot)是一种将统计测试中的统计显著性量度(如p value)和变化幅度相结合,从而能够帮助快速直观地识别那些变化幅度较大且具有统计学意义的数据点(基因等)的散点图,因图形与火山喷发相似而得名。
加载数据
数据主要由三行构成——基因名称列、Log2FoldChange(差异倍数)、pvalue(p值)。
# 读取数据
df <- read.table(file="data.txt",sep="\t",header=T,check.names=FALSE)
head(df)
image.png
基本火山图绘制
library(ggplot2)
ggplot(df, aes(log2FoldChange, -log10(pvalue))) + geom_point(alpha=0.6, size=2)
image.png
设置阈值并用不同颜色显示
1、设置阈值
#数据分类
df$group<-as.factor(ifelse(df$pvalue < 0.05 & abs(df$log2FoldChange) >= 2,
ifelse(df$log2FoldChange>= 2 ,'up','down'),'NS'))
2、绘图
p<-ggplot(df, aes(log2FoldChange, -log10(pvalue))) +
geom_point(aes(color = group),alpha=0.6, size=2)+
scale_color_manual(values = c( 'red','green','grey'))#颜色
p
image.png
3、添加辅助线
p+geom_vline(xintercept = c(-2, 2), lty=3,color = 'black', lwd=0.5) + #竖直辅助线
geom_hline(yintercept = -log10(0.05), lty=3,color = 'black', lwd=0.5)#垂直辅助线
image.png
4、主题设置
p1<-p+geom_vline(xintercept = c(-2, 2), lty=3,color = 'black', lwd=0.5) + #竖直辅助线
geom_hline(yintercept = -log10(0.05), lty=3,color = 'black', lwd=0.5)+#垂直辅助线
theme_bw()+
theme(legend.title = element_blank(),
panel.grid = element_blank())+
labs(title="volcanoplot",
x = 'log2 fold change',
y = '-log10 pvalue')
p1
image.png
添加标签
#设置标签——将p值小于0.05且差异倍数大于4的进行标注
df$label<-ifelse(df$pvalue<0.05&abs(df$log2FoldChange)>=4,"Y","N")
df$label<-ifelse(df$label == 'Y', as.character(df$gene), '')
#添加标签——使用ggrepel包完成
library(ggrepel)
p2+geom_vline(xintercept = c(-4, 4), lty=3,color = 'red', lwd=0.5)+
geom_text_repel(aes(x = log2FoldChange,
y = -log10(pvalue),
label=label),
max.overlaps = 10000,
size=3,
box.padding=unit(0.8,'lines'),
point.padding=unit(0.8, 'lines'),
segment.color='black',
show.legend=FALSE)
image.png
网友评论