2025-09-30 15:10:34

R绘图|六种高颜值“火山图Volcano“保姆级教程(调色、渐变色、水平线)——基于R包ggVolcano和ggvolcano

一、引言

火山图(Volcano Plot)是生物信息学中常用的可视化工具,广泛应用于基因表达和差异表达分析。它通过横坐标表示基因的表达差异(log2FC),纵坐标表示统计显著性(p值的负对数)。这种图形帮助研究人员快速识别在实验组与对照组之间有显著差异且变化较大的基因或特征。

在生物学研究中,火山图常用于RNA-Seq数据分析、疾病标志物筛选等方面。

ggvolcano 包是R语言中的一个工具,基于 ggplot2 库,简便地绘制火山图。它提供了多种自定义选项,如设置阈值、添加参考线和调整点的样式等,使用户能够根据具体数据需求优化图表,便于更好地展示差异表达分析的结果。

二、本代码输出结果

图a:基础绘图

图b:采用ggsci配色

图c:绘制渐变颜色火山图

图d:配备不同的图形形状

图e:增加额外的水平线

图f:调整图例位置等

三、示例数据和R代码

3.1 示例数据

🌟数据准备

差异基因表达矩阵:

火山图主要用到log2FoldChang和padj这两列数据

⚠️根据自己的数据进行整理后绘图,有问题可以留言获取帮助

3.2 R代码

⚠️该代码适用于上述数据,要完成自己的任务适当调整!

套逻辑以数据管道(节点/边处理)→ 网络建模 → 基础图形渲染为主线,兼顾学术出版级输出需求。

3.2.1 R包加载并导入数据

#清除环境

rm(list=ls())

# install.packages("devtools")

#devtools::install_github("BioSenior/ggVolcano")

library(ggVolcano)

#load data

deg_data <- read.csv("deg_data.csv",row.names =1)

# use the function -- add_regulate to add a regulate column

# to the DEG result data.

data <- add_regulate(deg_data, log2FC_name = "log2FoldChange",

fdr_name = "padj",log2FC = 1, fdr = 0.05)

3.2.2 模板1

##################模板1 ##################

p1<- ggvolcano(data,

x = "log2FoldChange",

y = "padj",

label = "row",

label_number = 10,

output = FALSE)

p1

ggsave("p1.png",p1, dpi =300, height = 5, width = 6)

#ggvolcano几个重要的参数

#pointSize = 1,是点大小

#pointShape = 21,是点的形状,可采用ggplot2所有形状,建议用虚心的方便填充颜色

#fills = c("#00AFBB", "#999999", "#FC4E07"),自定义填充颜色,需要三个一组

#colors = c("#00AFBB", "#999999", "#FC4E07"),自定义颜色,三个一组

#log2FC_cut = 1,添加log2fc虚线位置

#FDR_cut = 0.05,添加FDR 虚线位置

#label_number = 10,图中标记几个点

🌟输出结果

3.2.3 模板2:采用ggsci配色

############模板2,采用ggsci配色#########

#采用NEJM 经典配色

p2<- ggvolcano(data,

x = "log2FoldChange",

y = "padj",

pointSize = 2,

label = "row",

label_number = 5,

output = FALSE)+

ggsci::scale_color_nejm()+

ggsci::scale_fill_nejm()

p2

ggsave("p2.png",p2, dpi =300, height = 5, width = 6)

#另一种方式直接自己自定义配色

p21 <- ggvolcano(data, x = "log2FoldChange", y = "padj",

fills = c("#e94234","#b4b4d8","#269846"),

colors = c("#e94234","#b4b4d8","#269846"),

label = "row", label_number = 10, output = FALSE)

p21

🌟输出结果

3.2.4 模板3:加渐变

##############模板3,绘制渐变颜色火山图################

p3 <- gradual_volcano(deg_data,

x = "log2FoldChange",

y = "padj",

label = "row",

label_number = 10,

output = FALSE)

p3

#gradual_volcano增加的重要参数

#pointSizeRange = c(0.5, 4),点大小基于-LOG10FDR值

ggsave("p3.png",p3, dpi =300, height = 5, width = 6)

#自定义颜色

p31 <- gradual_volcano(data, x = "log2FoldChange", y = "padj",

label = "row", label_number = 10, output = FALSE)+

ggsci::scale_color_gsea()+

ggsci::scale_fill_gsea()

p31

#采用调色板

library(RColorBrewer)

p32 <- gradual_volcano(data, x = "log2FoldChange", y = "padj",

fills = brewer.pal(5, "RdYlBu"),

colors = brewer.pal(8, "RdYlBu"),

label = "row", label_number = 10, output = FALSE)

p32

library(patchwork)

p31|p32

🌟输出结果

3.2.5 模板4:点配置为不同形状

# ggvolcano包

#install.packages('ggvolcano')

library(ggvolcano)

data <- read.csv("data2.csv")

#基础绘图

ggvolcano(data,

logFC_col = "log2FoldChange",

pval_col = "pvalue",

pval_cutoff = 1e-6,

logFC_cutoff = 1.0,

title = "Basic Volcano Plot",

caption = paste("Total variables:", nrow(data)))

###################模板4,配备不同的形状###############

p4 <- ggvolcano(data,

logFC_col = "log2FoldChange",

pval_col = "pvalue",

pval_cutoff = 1e-4,

logFC_cutoff = 1.5,

title = "Custom Points Volcano Plot",

caption = "Customized point shapes and colors",

point_aes = list(

size = 2,

shape = c(16, 17, 18, 19), # Different shapes for NS, FC, P, and FC_P

color = c("lightgrey", "blue", "green", "red"),

alpha = 0.8

))+

ggsci::scale_color_npg()+

ggsci::scale_fill_npg()+

theme(

plot.title = element_blank(), # 隐藏标题

plot.caption = element_blank(), # 隐藏底部注释

legend.position = "none"

)

p4

ggsave("p4.png",p4, dpi =300, height = 5, width = 6)

🌟输出结果

3.2.6 模板5:增加额外的水平线

#####################模板5,增加额外的水平线############

p5 <- ggvolcano(data,

logFC_col = "log2FoldChange",

pval_col = "pvalue",

pval_cutoff = 0.05,

logFC_cutoff = 1.0,

title = "Volcano Plot with Reference Line",

caption = "Extra horizontal line",

horizontal_line = c(1e-10,1e-20,1e-40,1e-80),

horizontal_line_aes = list(type = "dashed",

color = c("#E64B35","#4DBBD5","#3C5488","#F39B7F"),

width = c(0.5,1,1.5,2))

)+

ggsci::scale_color_nejm()+

ggsci::scale_fill_nejm()+

theme(

plot.title = element_blank(), # 隐藏标题

plot.caption = element_blank(), # 隐藏底部注释

legend.position = "none"

)

p5

ggsave("p5.png",p5, dpi =300, height = 5, width = 6)

🌟输出结果

3.2.7 模板6:调整图例

########################模板6.调整图例##################

p6 <- ggvolcano(data,

logFC_col = "log2FoldChange",

pval_col = "pvalue",

pval_cutoff = 1e-4,

logFC_cutoff = 1.5,

title = "Volcano Plot with Custom Legend",

caption = "Legend labels and position modified",

legend_aes = list(

labels = c("Non-sig", "FC Sig", "P-value Sig", "Both Sig"),

position = "bottom",

label_size = 12,

icon_size = 6

))+

ggsci::scale_color_nejm()+

ggsci::scale_fill_nejm()+

theme(

plot.title = element_blank(), # 隐藏标题

plot.caption = element_blank(), # 隐藏底部注释

)

p6

ggsave("p6.png",p6, dpi =300, height = 5, width = 6)

🌟输出结果

四、相关信息

!!!本文内容由小编总结互联网和文献内容总结整理,如若侵权,联系立即删除!

!!!有需要的小伙伴评论区获取今天的测试代码和实例数据。

📌示例代码中提供了数据和代码,小编已经测试,可直接运行。

以上就是本节所有内容。

如果这篇文章对您有用,请帮忙一键三连(点赞、收藏、评论、分享),让该文章帮助到更多的小伙伴。