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)