火山图是用于差异表达分析结果可视化的一种有效方法。今天,我们来介绍一个用于增强火山图绘制的强大 R 包:EnhancedVolcano ,该包拥有强大的绘图功能,用户可以简单的通过设置颜色、形状、大小和阴影等参数定义不同的绘图属性,此外通过可以通过添加连线的方式有效避免数据点之间的重叠现象。使用 EnhancedVocalno 包绘制的火山图基本可以直接用于文献发表,可以说非常简单又实用的一款神器了。

1. 下载与安装

R 版本:3.6.1。从 Bioconductor 中下载包:

if (!requireNamespace('BiocManager', quietly = TRUE))
    install.packages('BiocManager')
    BiocManager::install('EnhancedVolcano')

2. 简单使用

2.1 输入数据格式

首先,我们先来介绍一下 EnhancedVolcan o 输入数据格式。EnhancedVolcano 包可以使用多种差异算法(例如 DESeq2 等)的结果作为输入,数据中需包含 log2FCPvalue  或(和) qvalue 结果,示例数据如下:



2.2 基础绘图

library(EnhancedVolcano)
res <- read.table(diffexpress,
                  sep="\t",
                  head=T,
                  row.names=1,
                  check.names=F,
                  quote="")  
EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4))

3、进阶功能

3.1 调整阈值,设置点及标签大小

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0)



3.2 调整颜色及点透明度

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    col = c('black', 'black', 'black', 'red3'),
    colAlpha = 1)



3.3 调整绘图点形状

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    #shape = 8,   #点形状
    shape = c(1, 4, 23, 25), #形状列表
    colAlpha = 1)





3.4 改变截止线及添加阈值线

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    colAlpha = 1,
    cutoffLineType = 'blank',
    cutoffLineCol = 'black',
    cutoffLineWidth = 0.8,
    hline = c(10e-4, 10e-8, 10e-12, 10e-15),
    hlineCol = c('grey0', 'grey25','grey50','grey75'),
    hlineType = 'longdash',
    hlineWidth = 0.8,
    gridlines.major = FALSE,
    gridlines.minor = FALSE)

3.5 调整标注位置、大小及文字

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    colAlpha = 1,
    cutoffLineType = 'twodash',
    cutoffLineWidth = 0.8,
    legend=c('NS','Log (base 2) fold-change','P value',
      'P value & Log (base 2) fold-change'),
    legendPosition = 'right',
    legendLabSize = 16,
    legendIconSize = 5.0)

legendVisible = FALSE
可以不展示图注

3.6 校正后的 p 值作图

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
     xlab = bquote(~Log[2]~ 'fold change'),
    ylab = bquote(~-Log[10]~adjusted~italic(P)),
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    colAlpha = 1,
    cutoffLineType = 'twodash',
    cutoffLineWidth = 0.8,
    legend=c('NS','Log (base 2) fold-change','P value',
      'P value & Log (base 2) fold-change'),
    legendPosition = 'right',
    legendLabSize = 16,
    legendIconSize = 5.0)



3.7 添加连线用于展示更多标注

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    xlab = bquote(~Log[2]~ 'fold change'),
    ylab = bquote(~-Log[10]~adjusted~italic(P)),
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    colAlpha = 1,
    cutoffLineType = 'twodash',
    cutoffLineWidth = 0.8,
    legend=c('NS','Log (base 2) fold-change','P value',
      'P value & Log (base 2) fold-change'),
    legendPosition = 'right',
    drawConnectors = TRUE,
    legendLabSize = 16,
    legendIconSize = 5.0)



3.8 只标注重要变量

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    xlab = bquote(~Log[2]~ 'fold change'),
    ylab = bquote(~-Log[10]~adjusted~italic(P)),
    selectLab = c('Spp1','S100a11','Mgp','LOC498555','Sh3bgrl',
                  'Ring1','Apoe','Tcn2','Ager','Mc1r'),
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    colAlpha = 1,
    cutoffLineType = 'twodash',
    cutoffLineWidth = 0.8,
    legend=c('NS','Log (base 2) fold-change','P value',
      'P value & Log (base 2) fold-change'),
    legendPosition = 'right',
    drawConnectors = TRUE,
    legendLabSize = 16,
    legendIconSize = 5.0)



3.9 加框展示变量

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    xlab = bquote(~Log[2]~ 'fold change'),
    ylab = bquote(~-Log[10]~adjusted~italic(P)),
    selectLab = c('Spp1','S100a11','Mgp','LOC498555','Sh3bgrl',
                  'Ring1','Apoe','Tcn2','Ager','Mc1r'),
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    colAlpha = 1,
    cutoffLineType = 'twodash',
    cutoffLineWidth = 0.8,
    legend=c('NS','Log (base 2) fold-change','P value',
      'P value & Log (base 2) fold-change'),
    legendPosition = 'right',
    drawConnectors = TRUE,
    boxedlabels = TRUE,
    legendLabSize = 16,
    legendIconSize = 5.0)

3.10 针对特殊点设置颜色

colCustom 功能可针对特定位点设置颜色,例如上下调基因设置不同颜色,参考代码如下:

keyvals <- rep('black', nrow(res))

 # set the base name/label as 'Mid'
 names(keyvals) <- rep('Mid', nrow(res))

 # fold change > 1.5 & p-value < 0.0001 为高表达
 keyvals[which(res$"log2(Fold_change)" > 1.5 & res$"p-value"<0.0001)] <- 'gold'
 names(keyvals)[which(res$"log2(Fold_change)" > 1.5 & res$"p-value"<0.0001)] <- 'high'

 # fold change < -1.5 & p-value < 0.0001为低表达
 keyvals[which(res$"log2(Fold_change)" < -1.5 & res$"p-value"<0.0001)] <- 'royalblue'
 names(keyvals)[which(res$"log2(Fold_change)" < -1.5 & res$"p-value"<0.0001)] <- 'low'

EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = 'A versus B',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    xlab = bquote(~Log[2]~ 'fold change'),
    ylab = bquote(~-Log[10]~adjusted~italic(P)),
    selectLab = rownames(res)[which(names(keyvals) %in% c('high', 'low'))],
    transcriptPointSize = 3.0,
    transcriptLabSize = 3.0,
    colAlpha = 1,
    cutoffLineType = 'twodash',
    cutoffLineWidth = 0.8,
    colCustom = keyvals,
    border = 'full',
    legend=c('NS','Log (base 2) fold-change','P value',
      'P value & Log (base 2) fold-change'),
    legendPosition = 'right',
    drawConnectors = FALSE,
    boxedlabels = FALSE,
    legendLabSize = 16,
    legendIconSize = 5.0)



3.11 设置特定点的大小

p <- EnhancedVolcano(res,
    lab = rownames(res),
    x = 'log2(Fold_change)',
    y = 'p-value',
    xlim = c(-4, 4),
    ylim = c(0,15),
    title = '',
    subtitle = '',
    pCutoff = 10e-3,
    FCcutoff = 1.5,
    xlab = bquote(~Log[2]~ 'fold change'),
    ylab = bquote(~-Log[10]~adjusted~italic(P)),
    selectLab = rownames(res)[which(names(keyvals) %in% c('high', 'low'))],
    transcriptLabSize = 3.0,
    transcriptPointSize = c(ifelse((res$"log2(Fold_change)">2 |res$"log2(Fold_change)"< -2) & res$"p-value"<0.0001 , 3, 1)),
    colAlpha = 1,
    cutoffLineType = 'twodash',
    cutoffLineWidth = 0.8,
    colCustom = keyvals,
    border = 'full',
    legend=c('NS','Log (base 2) fold-change','P value',
      'P value & Log (base 2) fold-change'),
    legendPosition = 'right',
    drawConnectors = FALSE,
    boxedlabels = FALSE,
    legendLabSize = 16,
    legendIconSize = 5.0,
    caption = "")
p

3.12 自定义刻度

p +
    ggplot2::coord_cartesian(xlim=c(-6, 6)) +
    ggplot2::scale_x_continuous(
      breaks=seq(-6,6, 1))



EnhancedVolcano 包绘制火山图就先介绍到这里,如果对你有所帮助,请点个赞吧。

本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

R EnhancedVolcano 绘制火山图的更多相关文章

  1. R语言绘制花瓣图flower plot

    R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观: 在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以 ...

  2. R语言绘制QQ图

    无论是直方图还是经验分布图,要从比较上鉴别样本是否处近似于某种类型的分布是困难的 QQ图可以帮我们鉴别样本的分布是否近似于某种类型的分布 R语言,代码如下: > qqnorm(w);qqline ...

  3. R语言绘制茎叶图

    与直方图相比,茎叶图更能细致的看出数据分布情况! 代码: > x<-c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75,+ 78, 79, 81, 8 ...

  4. R语言——绘制半圆形图

    好久没发点新的作品了.......也许...... Que sera, seraWhatever will be, will be

  5. R绘制韦恩图 | Venn图

    解决方案有好几种: 网页版,无脑绘图,就是麻烦,没有写代码方便 极简版,gplots::venn 文艺版,venneuler,不好安装rJava,参见Y叔 酷炫版,VennDiagram 特别注意: ...

  6. GGPLOT2-plotly |让你的火山图“活”过来

    火山图(Volcano Plot)常用于展示基因表达差异的分布,横坐标常为Fold change(倍数),越偏离中心差异倍数越大;纵坐标为P值(P值),值越大差异越显着.原因得名也许的英文因为查询查询 ...

  7. R绘图 第六篇:绘制线图(ggplot2)

    线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...

  8. R语言绘制相对性关系图

    准备 第一步就是安装R语言环境以及RStudio 图绘制准备 首先安装库文件,敲入指令,回车 install.packages('corrplot') 然后安装excel导入的插件,点击右上角impo ...

  9. 一幅图解决R语言绘制图例的各种问题

    一幅图解决R语言绘制图例的各种问题 用R语言画图的小伙伴们有木有这样的感受,"命令写的很完整,运行没有报错,可图例藏哪去了?""图画的很美,怎么总是图例不协调?" ...

  10. [R] 如何绘制各样本的pathway丰度热图?

    前言 一般而言,我们做完pathway富集分析,就做下气泡图或bar图来进行展示,但它们实际上只考虑了富集因子和Pvalue.如果我们不关注这两个因素,而是在乎样本本身的pathway丰度呢? 对于K ...

随机推荐

  1. Hyperf框架环境搭建

    https://hyperf.wiki/2.2/#/README 1.PHP 7.2 以上查看PHP : php -vcurl 127.0.0.1:9501 查看是否装swoole: php --ri ...

  2. Unity C# IEnumrator 与 async 有的区别

    前言 IEnumerator 和 async 是在 Unity 和 C# 中处理异步编程的两种不同方法.它们各自有不同的使用场景和优缺点. IEnumerator IEnumerator 是 C# 中 ...

  3. 记一次 .NET 某设备监控系统 死锁分析

    一:背景 1. 讲故事 上周看了一位训练营朋友的dump,据朋友说他的程序卡死了,看完之后发现是一例经典的死锁问题,蛮有意思,这个案例算是学习 .NET高级调试 入门级的案例,这里和大家分享一下. 二 ...

  4. 二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈

    二进制安装Kubernetes(k8s) v1.24.1 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安装 后续尽可能第一时间更新 ...

  5. Mybatis中批量插入和一些问题的解决

    批量插入有三个问题,第一是执行效率,第二数据冲突,第三数据重跑更新操作. 一般对于这样的问题有以下操作方法. 第一是执行效率:mybatis支持两种高效插入. 1.mybtis的foreach标签,f ...

  6. [Linux]常用命令之【netstat/ps/lsof/ss/kill/】#进程/服务/端口#

    查看系统中最近的端口连接记录 [root@sdc01 ~]# lsof -Pnl +M -i4 | grep "154" sshd 30963 0 3u IPv4 65160732 ...

  7. 巧用Nginx配置解决跨域问题

    页面nginx配置 1,前端页面放在域名根目录,比如,http://www.xuecheng.com/ ,对应的nginx配置: #门户 location / { alias D:/Z_lhy/Spr ...

  8. Tomcat长轮询原理与源码解析

    Tomcat长轮询原理与源码解析 系列文章目录和关于我 零丶长轮询的引入 最近在看工作使用到的diamond配置中心原理,发现大多数配置中心在推和拉模型上做的选择出奇的一致选择了基于长轮询的拉模型 基 ...

  9. Scanner对象的用法

    Java流程控制 想要实现程序与人的交互,我们必须使用Java给我们提供的工具类.就像我最开始写的一篇博客,用Java提供给我们的一个机器人类Robot是控制鼠标键盘的.今天我们学习的是一个可以获取用 ...

  10. Mysql8.0为什么取消了缓存查询的功能

    首先我们介绍一下MySQL的缓存机制 [MySQL缓存机制]简单的说就是缓存sql文本及查询结果,如果运行完全相同的SQL,服务器直接从缓存中取到结果,而不需要再去解析和执行SQL. 但如果表中任何数 ...