老司机带你三分钟用ggplot画出美观的火山图!

火山图相信大家肯定都不陌生,但是怎么画出美观而又大方的火山图可让很多小伙伴抓耳挠腮了,下面小果化身老司机带小伙伴们一同学习画直观的火山图吧

火山图是散点图的一种,它将统计测试中的统计显著性量度(如p value)和变化幅度相结合,从而能够帮助快速直观地识别那些变化幅度较大且具有统计学意义的数据点(基因等)。

火山图常应用于转录组研究,也能应用于基因组,蛋白质组,代谢组等统计数据。火山图的横轴一般是 Log2 (fold change) ,表示两组样品之间的差异倍数,点越偏离中心,表示差异倍数越大。火山图的纵轴一般是 -Log 10 (P-value) ,表示差异是否具有统计学意义,点越靠图的顶部表示差异越显著。火山图的点的颜色和大小也可以表示更多的属性,如基因的上调、下调、无差异、表达丰度等。火山图可以帮助我们快速筛选出具有生物学意义的差异基因,并在图上标记出来。

介绍完了火山图,为了小伙伴们更加全面的认识火山图,下面小果说一下它的优缺点。

火山图的优点:

  1. 它可以快速直观地展示出变化幅度较大且具有统计学意义的数据点,如差异基因等
  2. 它可以在图上标记出关注的基因的名字,方便后续的分析和验证
  3. 它可以用点的颜色和大小表示更多的属性,如基因的上调、下调、表达丰度等

火山图的缺点:

  1. 它只适合展示两组样品之间的比较,不能展示多组样品之间的差异
  2. 它不能展示数据点之间的相关性或聚类情况,需要结合其他图形如热图等
  3. 它可能受到数据标准化、批次效应等因素的影响,导致数据存在系统偏差

任何事物都不会是十全十美的,火山图也是如此。不过我们更关注它的优点。下面小果带大家使用ggplot2包来画出美观的火山图

首先是数据展示,前十行的数据如下图所示

下面就是代码部分啦

rm( list = ls())

gc()

# 设置工作路径

setwd(‘/media/desk16/iyun010’)

library(tidyverse)

# 读取数据集

data <- read.csv(‘data.csv’)

# 将p值进行-log10转化

volc_plot <- ggplot(data, aes(LogFC, -log10(PValue))) +

geom_point(size = 0.4) + # 调整点的大小

xlab(expression(“log”[2]*” fold change”)) + # 修饰横坐标的题目

ylab(expression(“-log”[10]*” p-value”)) + # 修饰纵坐标的题目

scale_x_continuous(limits = c(-15, 15)) + # 调整横坐标的范围

theme_minimal()

data1 <- data %>%

mutate(expression = case_when(LogFC >= 1 & PValue < 0.05 ~ “Up-regulated”, # 上调

LogFC <= -1 & PValue < 0.05 ~ “Down-regulated”, # 下调

TRUE ~ “Unchanged”)) # 不变

volc_plot1 <- ggplot(data1, aes(LogFC, -log10(PValue))) +

geom_point(size = 0.4, aes(color = expression)) + # 根据expression水平进行着色

xlab(expression(“log”[2]*” fold change”)) + # 修饰x轴题目

ylab(expression(“-log”[10]*” p-value”)) + # 修饰y轴题目

scale_x_continuous(limits = c(-15, 15)) +

scale_color_manual(values = c(“steelblue”, “grey”, “red”))+ # 添加三种颜色

# theme_minimal

theme_bw() +

theme(panel.grid.major=element_blank(),panel.grid.minor=element_blank())+

theme(axis.line = element_line(colour = “black”))

ggsave(‘volc.png’, plot = last_plot(),width=225, height =150,units = “mm” ,dpi=300)

画出结果如下图所示,是不是很美观呢 volc

今天的火山图绘制教程就到这里啦,感兴趣的可以找小果讨论哦,我们下次见~