R语言如何绘制渐变火山图

前言

本篇是R语言如何绘制渐变火山图的教程,普通的火山图内容介绍可以看这里:https://www.r2omics.cn/docs/gallery/omicsChart/volcano/volcano.html

什么是渐变火山图?

渐变火山图是火山图的变种。它可以将散点颜色进行渐变以更清晰地表现显著性p值,也可以使用散点的大小来表示更显著的差异。

与常规的火山图相比在表现表达差异的同时也更好的呈现了显著性关系。

绘图前的数据准备

demo数据可以在https://www.r2omics.cn/res/demodata/volcano2.txt下载。

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

# A tibble: 1,880 x 4
   Name        FC      PValue Marker
   <chr>    <dbl>       <dbl>  <int>
 1 GZMK     2.80  0.000000976      1
 2 PHKB     1.65  0.00000236       1
 3 APOC3    1.94  0.00000634       1
 4 LRP1     1.70  0.0000106        1
 5 SAA4     1.48  0.0000114        1
 6 ALDH18A1 2.40  0.0000181        1
 7 PARP1    1.83  0.0000239        1
 8 MARCKS   1.84  0.0000354        1
 9 STOM     0.445 0.0000421        1
10 RAP2B    0.510 0.0000431        1
# i 1,870 more rows

R语言怎么画渐变火山图

与常规的火山图相比,代码中最核心的区别是geom_point里的颜色和点大小映射为P值

# 代码来源:https://www.r2omics.cn/
# 加载R包,没有安装请先安装  install.packages("包名") 
library(ggplot2)
library(ggrepel)  #用于标记的包
library(tidyverse)

# 读取火山图数据文件
data = read.delim("https://www.r2omics.cn/res/demodata/volcano2.txt")
# 建议您的文件里对应的名称跟demo数据一致,这样不用更改后续代码中的变量名称

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

# 标记方式(一)
# 根据数据框中的Marker列,1的为标记,其他的为不标记
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(FC),-1*log10(PValue))) +                       # 加载数据,定义横纵坐标
  geom_point(aes(color = -1*log10(PValue),size=-1*log10(PValue))) + # 绘制散点图,颜色和大小依据是数据框的PValue列
  scale_color_gradientn(colors =c("#5E4FA2","#3288BD","#66C2A5",    # 设置渐变色
                                  "#ABDDA4","#E6F598","#FFFFBF",
                                  "#FEE08B", "#FDAE61","#F46D43", 
                                  "#D53E4F", "red","#9E0142")) +
  
  scale_radius(     # 设置点大小图例
    range=c(1,3),   # 设置点大小的范围
    guide=NULL)+    # 不显示该图例
  labs(title="",    # 定义标题,x轴,y轴名称
       x="log[2](FC)", 
       y="-log[10](PValue)") + 
  geom_hline(yintercept=-log10(PValue),linetype=2)+         # 在图上添加虚线
  geom_vline(xintercept=c(-log2(FC),log2(FC)),linetype=2)+  # 在图上添加虚线
  geom_text_repel(aes(x = log2(FC),                         # geom_text_repel 标记函数
                      y = -1*log10(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)+
  theme_classic()