R EnhancedVolcano 绘制火山图
火山图是用于差异表达分析结果可视化的一种有效方法。今天,我们来介绍一个用于增强火山图绘制的强大 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 等)的结果作为输入,数据中需包含 log2FC 、Pvalue 或(和) 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)
可以不展示图注
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 绘制火山图的更多相关文章
- R语言绘制花瓣图flower plot
R语言中有很多现成的R包,可以绘制venn图,但是最多支持5组,当组别数大于5时,venn图即使能够画出来,看上去也非常复杂,不够直观: 在实际的数据分析中,组别大于5的情况还是经常遇到的,这是就可以 ...
- R语言绘制QQ图
无论是直方图还是经验分布图,要从比较上鉴别样本是否处近似于某种类型的分布是困难的 QQ图可以帮我们鉴别样本的分布是否近似于某种类型的分布 R语言,代码如下: > qqnorm(w);qqline ...
- R语言绘制茎叶图
与直方图相比,茎叶图更能细致的看出数据分布情况! 代码: > x<-c(25, 45, 50, 54, 55, 61, 64, 68, 72, 75, 75,+ 78, 79, 81, 8 ...
- R语言——绘制半圆形图
好久没发点新的作品了.......也许...... Que sera, seraWhatever will be, will be
- R绘制韦恩图 | Venn图
解决方案有好几种: 网页版,无脑绘图,就是麻烦,没有写代码方便 极简版,gplots::venn 文艺版,venneuler,不好安装rJava,参见Y叔 酷炫版,VennDiagram 特别注意: ...
- GGPLOT2-plotly |让你的火山图“活”过来
火山图(Volcano Plot)常用于展示基因表达差异的分布,横坐标常为Fold change(倍数),越偏离中心差异倍数越大;纵坐标为P值(P值),值越大差异越显着.原因得名也许的英文因为查询查询 ...
- R绘图 第六篇:绘制线图(ggplot2)
线图是由折线构成的图形,线图是把散点从左向右用直线连接起来而构成的图形,在以时间序列为x轴的线图中,可以看到数据增长的趋势. geom_line(mapping = NULL, data = NULL ...
- R语言绘制相对性关系图
准备 第一步就是安装R语言环境以及RStudio 图绘制准备 首先安装库文件,敲入指令,回车 install.packages('corrplot') 然后安装excel导入的插件,点击右上角impo ...
- 一幅图解决R语言绘制图例的各种问题
一幅图解决R语言绘制图例的各种问题 用R语言画图的小伙伴们有木有这样的感受,"命令写的很完整,运行没有报错,可图例藏哪去了?""图画的很美,怎么总是图例不协调?" ...
- [R] 如何绘制各样本的pathway丰度热图?
前言 一般而言,我们做完pathway富集分析,就做下气泡图或bar图来进行展示,但它们实际上只考虑了富集因子和Pvalue.如果我们不关注这两个因素,而是在乎样本本身的pathway丰度呢? 对于K ...
随机推荐
- 纯CSS3实现多行文本截断
纯CSS处理多行文本展开和收起,直接上代码和效果图 1 <html> 2 <header> 3 <style> 4 .wrap { 5 position: rela ...
- 容器云平台监控告警体系(三)—— 使用Prometheus Operator部署并管理Prometheus Server
1.概述 Prometheus Operator是一种基于Kubernetes的应用程序,用于管理Prometheus实例和相关的监控组件.它是由CoreOS开发的开源工具,旨在简化Prometheu ...
- 【Vue原理模拟】模拟Vue实现响应式数据
1. 预期效果 当数据变动时,触发自定义的回调函数. 2. 思路 对对象 object 的 setter 进行设置,使 setter 在赋值之后执行回调函数 callback(). 3.细节 3.1 ...
- must be reducible node 错误
"must be reducible node"错误通常是由于使用了无法转换为表达式树的代码或表达式. 场景再现:在项目中使用GroupBy的时候,对字段进行了类型转换,接下来正常 ...
- python:生成半年内的巡检日报execl
问题描述:使用脚本来生成半年内的数据,数据内容大概为每天的数据库巡检日报,临时抱佛脚.数据不可能是真实的,都是随机生成的,想要使用真实的数据后面直连操作系统或者数据库.后期可以慢慢实现自动化生成每天的 ...
- Docker中Nginx搭建以及配置
docker nginx搭建 1 docker pull nginx docker pull nginx 2 启动nginx docker run --name nginx -p 80:80 -d n ...
- 两种路由模式的区别(hash模式,history模式)
1. hash 带#号的,history不带#号2.hash模式用的hashChange监听路径的变化3.history用的是HTML5相关的API语法 使用pushState => 添加一条历 ...
- Linux内存和磁盘管理(入门)
关于对Linux系统的内存和磁盘的操作 内存和磁盘使用率 查看内存使用率: free.top 查看磁盘使用率: fdisk.df.du free 以KB为单位: $ free total used f ...
- 一个可用于生产项目 基于 .NET 6 自研ORM
Fast Framework 作者 Mr-zhong 代码改变世界.... 一.前言 Fast Framework 基于NET6.0 封装的轻量级 ORM 框架 支持多种数据库 SqlServer O ...
- List嵌套排序并取第一个对象
using Newtonsoft.Json;using 嵌套List排序; //示例listvar exampleString = "{\"code\":1,\" ...