火山图是一种对差异表达分析结果进行可视化的常用方法
导语
火山图是一种对差异表达分析结果进行可视化的常用方法。
背景介绍 今天小编给大家带来的是一个强大的火山图绘制工具--EnhancedVolcano,用户可以通过颜色、形状、大小、环绕和阴影等参数对火山图进行个性化的调节,并且可以有效地插入基因名,避免发生数据点重叠的情况。
R包安装 if (!requireNamespace('BiocManager', quietly = TRUE)) install.packages('BiocManager') BiocManager::install('EnhancedVolcano') library(EnhancedVolcano)
可视化展示 01
数据展示 library(airway)library(magrittr)data('airway')airway$dex %<>% relevel('untrt')##将 Ensembl gene ID 注释为gene symbolens <- rownames(airway)library(org.Hs.eg.db)symbols <- mapIds(org.Hs.eg.db, keys = ens, column = c('SYMBOL'), keytype = 'ENSEMBL')symbols <- symbols[!is.na(symbols)]symbols <- symbols[match(rownames(airway), names(symbols))]rownames(airway) <- symbolskeep <- !is.na(rownames(airway))airway <- airway[keep,]##使用 DESeq2 进行差异表达:library('DESeq2')dds <- DESeqDataSet(airway, design = ~ cell + dex)dds <- DESeq(dds, betaPrior=FALSE)res <- results(dds, contrast = c('dex','trt','untrt'))res <- lfcShrink(dds, contrast = c('dex','trt','untrt'), res=res, type = 'normal')head(res)
02 绘制基础火山图
对于最基本的火山图,只需要一个包含labels、log2FC 和校正或未校正的 P 值的 数据框或 矩 阵 。 log2FC 的cutoff是>|2|; P 值的默认cutoff为10e-6。 EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue')
03 Advanced features
修改 log2FC 和 P值的cutoff,标题,并且调整点和标签大小 EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue', ##设置题目 title = 'N061011 versus N61311', ##设置p值cutoff和foldchange的cutoff pCutoff = 10e-32, FCcutoff = 0.5, ##设置点和标签的大小 pointSize = 3.0, labSize = 6.0)
调整点着色的颜色和透明度
我们调整满足log2FC 和 P 值cutoff的变量为红色,其他所有为黑色。alpha控制了绘制点的透明度:1 为 100% 不透明;0 为 100% 透明。
EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue', title = 'N061011 versus N61311', pCutoff = 10e-16, FCcutoff = 1.5, pointSize = 3.0, labSize = 6.0, col=c('black', 'black', 'black', 'red3'), colAlpha = 1)
调整点的形状
默认形状是圆形,我们可以通过shape参数指定图形的形状,该参数接受单个或四个可能的值:如果有四个值,设置的形状会和颜色一样分配到不同区间;如果是单个值,所有点都使用同一个形状。
##shape为一个值EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue', title = 'N061011 versus N61311', pCutoff = 10e-16, FCcutoff = 1.5, pointSize = 4.0, labSize = 6.0, shape = 8, colAlpha = 1)##shape为4个值EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue', title = 'N061011 versus N61311', pCutoff = 10e-16, FCcutoff = 1.5, pointSize = 3.0, labSize = 6.0, shape = c(1, 4, 23, 25), colAlpha = 1)
通过添加connectors来插入更多标签
为了最大化绘图窗口中的可用空间,可以在适当的情况下添加从标签到点的连线来插入更多标签。这些连线的宽度和颜色也可以分别使用widthConnectors和colConnectors进行调整。
结果不一定总是理想的,偶尔也会使图片看起来过于拥挤。
EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue', xlab = bquote(~Log[2]~ 'fold change'), pCutoff = 10e-32, FCcutoff = 2.0, pointSize = 4.0, labSize = 6.0, colAlpha = 1, legendPosition = 'right', legendLabSize = 12, legendIconSize = 4.0, #添加Connectors drawConnectors = TRUE, widthConnectors = 0.75)
添加label边框 EnhancedVolcano(res, lab = rownames(res), x = 'log2FoldChange', y = 'pvalue', selectLab = c('VCAM1','KCTD12','ADAM12', 'CXCL12','CACNB2','SPARCL1','DUSP1','SAMHD1','MAOA'), xlab = bquote(~Log[2]~ 'fold change'), pCutoff = 10e-14, FCcutoff = 2.0, pointSize = 4.0, labSize = 6.0, labCol = 'black', labFace = 'bold', boxedLabels = TRUE, colAlpha = 4/5, legendPosition = 'right', legendLabSize = 14, legendIconSize = 4.0, drawConnectors = TRUE, widthConnectors = 1.0, colConnectors = 'black')
翻转火山图
lab_italics <- paste0("italic('", rownames(res), "')")selectLab_italics = paste0( "italic('", c('VCAM1','KCTD12','ADAM12', 'CXCL12','CACNB2','SPARCL1','DUSP1','SAMHD1','MAOA'), "')")EnhancedVolcano(res, lab = lab_italics, x = 'log2FoldChange', y = 'pvalue', selectLab = selectLab_italics, xlab = bquote(~Log[2]~ 'fold change'), pCutoff = 10e-14, FCcutoff = 1.0, pointSize = 3.0, labSize = 6.0, labCol = 'black', labFace = 'bold', boxedLabels = TRUE, parseLabels = TRUE, col = c('black', 'pink', 'purple', 'red3'), colAlpha = 4/5, legendPosition = 'bottom', legendLabSize = 14, legendIconSize = 4.0, drawConnectors = TRUE, widthConnectors = 1.0, colConnectors = 'black') + coord_flip()
通过自定义点的大小突出关键变量 library("pasilla") pasCts <- system.file("extdata", "pasilla_gene_counts.tsv", package="pasilla", mustWork=TRUE) pasAnno <- system.file("extdata", "pasilla_sample_annotation.csv", package="pasilla", mustWork=TRUE) cts <- as.matrix(read.csv(pasCts,sep="\t",row.names="gene_id")) coldata <- read.csv(pasAnno, row.names=1) coldata <- coldata[,c("condition","type")] rownames(coldata) <- sub("fb", "", rownames(coldata)) cts <- cts[, rownames(coldata)] library("DESeq2") dds <- DESeqDataSetFromMatrix(countData = cts, colData = coldata, design = ~ condition) featureData <- data.frame(gene=rownames(cts)) mcols(dds) <- DataFrame(mcols(dds), featureData) dds <- DESeq(dds) res <- results(dds) p1 <- EnhancedVolcano(res, lab = rownames(res), x = "log2FoldChange", y = "pvalue", pCutoff = 10e-4, FCcutoff = 2, ylim = c(0, -log10(10e-12)), pointSize = c(ifelse(res$log2FoldChange>2, 8, 1)), labSize = 6.0, shape = c(6, 6, 19, 16), title = "DESeq2 results", subtitle = "Differential expression", caption = bquote(~Log[2]~ "fold change cutoff, 2; p-value cutoff, 10e-4"), legendPosition = "right", legendLabSize = 14, col = c("grey30", "forestgreen", "royalblue", "red2"), colAlpha = 0.9, drawConnectors = TRUE, hline = c(10e-8), widthConnectors = 0.5) p1
更改为连续配色方案 p1 <- EnhancedVolcano(res, lab = rownames(res), x = "log2FoldChange", y = "pvalue", pCutoff = 10e-4, FCcutoff = 2, ylim = c(0, -log10(10e-12)), pointSize = c(ifelse(res$log2FoldChange>2, 8, 1)), labSize = 6.0, shape = c(6, 6, 19, 16), title = "DESeq2 results", subtitle = "Differential expression", caption = bquote(~Log[2]~ "fold change cutoff, 2; p-value cutoff, 10e-4"), legendPosition = "right", legendLabSize = 14, colAlpha = 0.9, colGradient = c('red3', 'royalblue'), drawConnectors = TRUE, hline = c(10e-8), widthConnectors = 0.5) p1
文章参考:https://bioconductor.org/packages/release/bioc/vignettes/EnhancedVolcano/inst/doc/EnhancedVolcano.html
小编总结 火山图相信大家都很熟悉啦,R语言绘制火山图有许多可以用的工具,今天小编介绍的EnhancedVolcano是一个比较新的R包,它的参数设置也是非常的简单易懂,大家在下次画火山图的时候可以多多尝试哦!
不感兴趣
看过了
取消
人点赞
人收藏
打赏
不感兴趣
看过了
取消
打赏金额
认可我就打赏我~
1元 5元 10元 20元 50元 其它打赏作者
认可我就打赏我~
扫描二维码
立即打赏给Ta吧!
温馨提示:仅支持微信支付!