查看原文
其他

火山图(Volcano Plot)

博文 生信者言 2022-03-29


近来,有几位群友在交流群中咨询,如何用R做一张火山图?今天应邀而来,与大家交流下火山图应用、输入文件和作图心得。


火山图(Volcano Plot)是一类用来展示组间差异数据的图像,因为在生物体发生变化时从全局角度而言大部分的基因表达没有或着发生了很小程度的变化,只有少部分基因的表达发生了显著的变化。故而,火山图常见于RNA表达谱和芯片的数据分析中,最常用于分析基因的差异表达,近年来也陆续有其他组学的应用,此处不做详述。


火山图的本质是一个Plus版的散点图,其中包含两个重要的概念


1)显著性,也就是p-value,差异性检验两组样本的p值,以负对数-log10(P-value)转换做为纵坐标;


2)以log2(Fold Change)为横坐标,即可得火山图,利用一定的筛选条件(如Fold Change大于2倍,显著性P值小于0.05),即可筛选出显著差异表达的基因,进行后续研究。

 

如果大家用的是DEseq2分析RNA表达谱的数据,分析结果应该如下,其中log2FoldChange是表达量的log2(Fold Change)值,padj列示矫正后的pvalue,这两列也就是我们画火山图需要的两列。



首先,我们把DEseq的输出格式转换成dataframe格式,用函数as.data.frame(),并用head查看其前6行,如下:

df <- as.data.frame(res) head(df)



接下来按照P<0.05, log2FoldChange > 2 或者log2FoldChange < -2进行下调和上调表达的颜色设置:


设定分组并赋值给变量color,我们把P<0.05, log2FoldChange > 2定义为上调,颜色设置为红色,把P<0.05, log2FoldChange < -2定义为下调,颜色设定为蓝色,其他既不上调也不下调的颜色设定为灰色,见代码如下:

df$color <- ifelse(df$padj < 0.05 & abs(df$log2FoldChange) >= 2,ifelse(df$log2FoldChange > 2 ,'red','blue'),'gray')


设定好分组,还需要给分组指定颜色:


r color<- c(red = "red", gray = "gray", blue ="blue")


绘图的完整代码在这里:


p <- ggplot(df, aes(log2FoldChange, -log10(padj), col = color)) +    geom_point() +    theme_bw() +    scale_color_manual(values = color) +    labs(x="log2 (fold change)",y="-log10 (q-value)") +    geom_hline(yintercept = -log10(0.05), lty=4,col="grey",lwd=0.6) +    geom_vline(xintercept = c(-2, 2), lty=4,col="grey",lwd=0.6) +    theme(legend.position = "none",          panel.grid=element_blank(),          axis.title = element_text(size = 16),          axis.text = element_text(size = 14)) p


代码部分需要注意的亮点:


1)对qvalue做了一个log10的转换

2)画纵轴阈值线的时候做了-log10(0.05)

3)其他绘图参数和理念都是和绘制散点图是一样的



 

有任何问题,欢迎在文末留言或加入生信者言讨论群,和我们一起交流,入群请联系微信:genegogo007。



/End.




推荐阅读

点击下方图片即可阅读


扫码关注,获取更多精彩内容

喜马拉雅FM搜索并订阅:生信者言;收听内容:

《一分钟听懂NGS基础概念》,让生信分析不再遥不可及

《亲爱的姑娘,你值得被温柔以待》,11个真实的人物故事

《众病之王:癌症传》,一起聆听人类对抗癌症的斗争史

回复文字:果然科学,看一篇好玩的科普文。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存