R语言实战:用ggpubr一步搞定带显著性标记的科研级小提琴图(附完整代码)
2026/6/4 12:30:26 网站建设 项目流程

R语言科研绘图实战:用ggpubr高效绘制带统计检验的小提琴图

在生物医学研究和基因表达分析中,数据可视化是揭示生物学意义的关键环节。小提琴图因其能同时展示数据分布密度和关键统计量,已成为学术论文中的标准图表之一。然而,从原始数据到可直接用于发表的图表,往往需要经历繁琐的代码编写和格式调整过程。

本文将介绍如何利用R语言中的ggpubr包,快速生成带有显著性标记的科研级小提琴图。这种方法特别适合需要处理多组比较的生物信息学研究人员,能够将数据整理、统计检验和可视化完美结合,显著提升分析效率。

1. 环境准备与数据加载

在开始绘图前,我们需要确保所有必要的R包已安装并加载。ggpubr是基于ggplot2的扩展包,提供了更简单的语法和预置的统计检验功能。

# 安装必要包(如未安装) if (!require("ggpubr")) install.packages("ggpubr") if (!require("ggplot2")) install.packages("ggplot2") # 加载包 library(ggpubr) library(ggplot2)

假设我们有一个包含基因表达数据的数据框,结构如下:

# 示例数据结构 Type <- data.frame( Type = rep(c("Amplification", "Normal", "Deletion"), each=30), GeneExp = c(rnorm(30, mean=5, sd=1), rnorm(30, mean=3, sd=0.8), rnorm(30, mean=2, sd=0.5)) )

2. 基础小提琴图绘制

ggpubr提供了ggviolin()函数,可以快速生成基础小提琴图。相比ggplot2,它简化了许多参数设置。

# 基础小提琴图 basic_plot <- ggviolin( data = Type, x = "Type", # x轴变量 y = "GeneExp", # y轴变量 fill = "Type" # 按Type分组填充颜色 ) print(basic_plot)

此时生成的图表已经包含了按组别填充颜色的小提琴图,但缺乏统计信息和更专业的视觉效果。

3. 增强可视化效果

科研图表不仅需要准确传达数据信息,还需要符合学术出版的美学标准。我们可以通过以下方式增强图表表现力:

3.1 添加箱线图增强统计量显示

在小提琴图内部添加箱线图可以更直观地展示中位数和四分位数:

enhanced_plot <- ggviolin( data = Type, x = "Type", y = "GeneExp", fill = "Type", add = "boxplot", # 添加箱线图 add.params = list( fill = "white", # 箱线图填充色 width = 0.1 # 箱线图宽度 ) )

3.2 使用专业期刊配色方案

ggpubr内置了多种科学期刊常用的配色方案,如柳叶刀(Lancet)风格:

enhanced_plot <- enhanced_plot + scale_fill_manual(values = get_palette("lancet", 3))

其他可用配色方案包括:

  • "npg":Nature Publishing Group风格
  • "jco":Journal of Clinical Oncology风格
  • "aaas":American Association for the Advancement of Science风格

4. 组间统计检验与显著性标记

科研图表最重要的功能之一是展示组间差异的统计学显著性。ggpubr的stat_compare_means()函数可以方便地添加多种统计检验结果。

4.1 定义比较组

首先需要明确哪些组别之间需要进行比较:

# 定义三组之间的两两比较 my_comparisons <- list( c("Deletion", "Normal"), c("Normal", "Amplification"), c("Amplification", "Deletion") )

4.2 添加t检验与显著性标记

final_plot <- enhanced_plot + stat_compare_means( comparisons = my_comparisons, # 指定比较组 method = "t.test", # 使用t检验 label = "p.signif", # 显示显著性标记(*) hide.ns = TRUE # 隐藏不显著的结果 ) + labs( title = "基因表达水平在不同基因组状态下的差异", x = "基因组状态", y = "基因表达水平(FPKM)" ) + theme_pubr() # 使用ggpubr的简洁主题

stat_compare_means()函数支持多种统计检验方法:

  • "t.test":学生t检验(默认)
  • "wilcox.test":Wilcoxon秩和检验
  • "anova":单因素方差分析
  • "kruskal.test":Kruskal-Wallis检验

5. 高级定制与优化

5.1 调整组别顺序

有时我们需要按照某种逻辑顺序排列组别,例如从低到高:

Type$Type <- factor(Type$Type, levels = c("Deletion", "Normal", "Amplification"))

或者在绘图时直接指定顺序:

ggviolin( data = Type, x = "Type", y = "GeneExp", order = c("Deletion", "Normal", "Amplification") )

5.2 调整显著性标记位置

当组间差异较大时,可能需要手动调整显著性标记的位置:

final_plot + stat_compare_means( comparisons = my_comparisons, label.y = c(7, 8, 9) # 为每个比较设置不同的y轴位置 )

5.3 添加全局p值

除了两两比较外,有时还需要展示整体差异的p值:

final_plot + stat_compare_means( method = "anova", label.y = 10 # 全局p值的位置 )

6. 导出高质量图表

最后,我们需要将图表导出为适合发表的格式。ggplot2提供了ggsave()函数:

ggsave( filename = "gene_expression_violin.png", plot = final_plot, width = 8, # 宽度(英寸) height = 6, # 高度(英寸) dpi = 600 # 分辨率 )

推荐导出格式:

  • PNG:适合包含在Word或PPT中
  • PDF:适合LaTeX文档或需要矢量图的场合
  • TIFF:部分期刊要求的格式

7. 完整代码示例

以下是生成带显著性标记的小提琴图的完整代码:

library(ggpubr) # 准备数据 Type <- data.frame( Type = rep(c("Amplification", "Normal", "Deletion"), each=30), GeneExp = c(rnorm(30, mean=5, sd=1), rnorm(30, mean=3, sd=0.8), rnorm(30, mean=2, sd=0.5)) ) # 定义比较组 my_comparisons <- list( c("Deletion", "Normal"), c("Normal", "Amplification"), c("Amplification", "Deletion") ) # 生成完整图表 final_plot <- ggviolin( data = Type, x = "Type", y = "GeneExp", fill = "Type", palette = "lancet", add = "boxplot", add.params = list(fill = "white"), order = c("Deletion", "Normal", "Amplification") ) + stat_compare_means( comparisons = my_comparisons, method = "t.test", label = "p.signif", hide.ns = TRUE ) + labs( title = "基因表达水平在不同基因组状态下的差异", x = "基因组状态", y = "基因表达水平(FPKM)" ) + theme_pubr() # 显示图表 print(final_plot) # 保存图表 ggsave("gene_expression_violin.png", final_plot, width=8, height=6, dpi=600)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询