10  火山图

10.1 什么是火山图?

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

常见问题:

1,什么是fold change?

翻译成中文是差异倍数,简单来说就是基因在一组样品中的表达值的均值除以其在另一组样品中的表达值的均值。所以火山图只适合展示两组样品之间的比较。

2,为什么要做Log 2转换?

两个数相除获得的结果 (fold change)要么大于1,要么小于1,要么等于1。那么对应于基因差异呢?简单说,大于1表示上调(可以描述为上调多少倍),小于1表示下调(可以描述为下调为原来的多少分之多少)。大于1可以到多大呢?多大都有可能。小于1可以到多小呢?最小到0。用原始的fold change描述上调方便,描述下调不方便。绘制到图中时,上调占的空间多,下调占的空间少,展示起来不方便。所以一般会做Log 2转换。

3,什么是P-value?

统计检验获得的是否统计差异显著的一个衡量值,约定成俗的P-value<0.05为统计检验显著的常规标准。

本文我们就来讨论一下火山图是如何绘制的以及如何对其进行解读。

10.2 绘图前的数据准备

demo数据可以在https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Volcano/Volcano.txt下载。

必须包含3列数据,必须有行名。分别是名称列,FC列,PValue列。Marker列为非必须。如果下方的参数中选择Marker为标记方式,则需要有此列数据。

10.3 R语言怎么画火山图

# 加载R包,没有安装请先安装  install.packages("包名") 
library(ggplot2)
library(ggrepel)  #用于标记的包

# 读取火山图数据文件
data = read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Volcano/Volcano.txt",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件
                header = T    # 指定第一行是列名
)
# 建议您的文件里对应的名称跟demo数据一致,这样不用更改后续代码中的变量名称

FC = 1.5 # 用来判断上下调,一般蛋白质组的项目卡1.5
PValue = 0.05 #用来判断上下调

# 判断每个基因的上下调,往数据框data里新增了sig列
data$sig[(-1*log10(data$PValue) < -1*log10(PValue)|data$PValue=="NA")|(log2(data$FC) < log2(FC))& log2(data$FC) > -log2(FC)] <- "NotSig"
data$sig[-1*log10(data$PValue) >= -1*log10(PValue) & log2(data$FC) >= log2(FC)] <- "Up"
data$sig[-1*log10(data$PValue) >= -1*log10(PValue) & log2(data$FC) <= -log2(FC)] <- "Down"

# 标记方式(一)
# 根据数据框中的Marker列,1的为标记,0的为不标记
data$label=ifelse(data$Marker == 1, as.character(data$Name), '')
# (或)标记方式(二)
# 根据PValue小于多少和log[2]FC的绝对值大于多少筛选出合适的点
# PvalueLimit = 0.0001
# FCLimit = 5
# data$label=ifelse(data$PValue < PvalueLimit & abs(log2(data$FC)) >= FCLimit, as.character(data$Name), '')

# 绘图
ggplot(data,aes(log2(data$FC),-1*log10(data$PValue))) +    # 加载数据,定义横纵坐标
  geom_point(aes(color = sig)) +                           # 绘制散点图,分组依据是数据框的sig列
  labs(title="volcanoplot",                                # 定义标题,x轴,y轴名称
       x="log[2](FC)", 
       y="-log[10](PValue)") + 
  # scale_color_manual(values = c("red","green","blue")) + # 自定义颜色,将values更改成你想要的三个颜色
  geom_hline(yintercept=-log10(PValue),linetype=2)+        # 在图上添加虚线
  geom_vline(xintercept=c(-log2(FC),log2(FC)),linetype=2)+ # 在图上添加虚线
  geom_text_repel(aes(x = log2(data$FC),                   # geom_text_repel 标记函数
                      y = -1*log10(data$PValue),          
                      label=label),                       
                  max.overlaps = 10000,                    # 最大覆盖率,当点很多时,有些标记会被覆盖,调大该值则不被覆盖,反之。
                  size=3,                                  # 字体大小
                  box.padding=unit(0.5,'lines'),           # 标记的边距
                  point.padding=unit(0.1, 'lines'), 
                  segment.color='black',                   # 标记线条的颜色
                  show.legend=FALSE)

10.4 BioLadder生信云平台在线绘制火山图

不想写代码?可以用BioLadder生信云平台在线绘制火山图。

免费使用,注册登录后畅享40+模块。

网址:

火山图-BioLadder生物信息在线分析可视化平台​www.bioladder.cn/web/#/chart/19