'ggpubr' provides some easy-to-use functions for creating and customizing 'ggplot2'- based publication ready plots.
https://github.com/kassambara/ggpubr ggpubr包中提供了ggboxplot(箱式图)、ggviolin(小提琴图)、ggbarplot(条形图)等一些列基于ggplot2的绘图方法,在简化ggplot2基础绘图的同时也添加了一些新的功能,比如可以便捷的添加显著性信息! 首先,安装加载ggpubr包,并基于ToothGrowth数据集进行测试: # 安装
p_load(devtools)
install_github('kassambara/ggpubr')
p_load(ggpubr)
# 测试数据
data(ToothGrowth)
在进行差异表达分析时,常会完成一个相应的可视化展示。其中一种情况,就是对于目标因子在两组样本中的表达差异进行可视化,如箱式图。在箱式图中可能会再标明显著性p值,其实以添加文本的方式即可,只不过对于需要多个标记时,其复杂度也会增加,而ggpubr中则提供了相对简单的操作方法! ggpubr中有两个比较关键的函数: compare_means() : 统计分析
stat_compare_means() : 自行完成统计分析,并在图中添加显著性信息
1、两组间差异表达分析: compare_means(len~supp, data = ToothGrowth)
可见,对于ToothGrowth中的supp列定义的OJ和VC两组,其len的差异显著性为p=0.0645,而两组间差异分析默认Wilcoxon test: 对应的绘图: ggboxplot(ToothGrowth, x = 'supp', y = 'len', color = 'supp',
palette = 'jco', add = 'jitter') + stat_compare_means()

stat_compare_means() 中也提供了T检验,直接在其中设置method参数即可。而其显著性标签的位置及显示类型也是可以更改的。如下,使用T检验进行组间差异分析、并将显著性p值转换为*标记(参数label = 'p.signif'),标示在图中的(1.5, 40)位置:
ggboxplot(ToothGrowth, x = 'supp', y = 'len', color = 'supp',
palette = 'jco', add = 'jitter') + stat_compare_means(method = 't.test', label = 'p.signif', label.x = 1.5, label.y = 40)

这里,ns表示非显著的,其他显著性显示的对应关系如下: 'n': p > 0.05; '*': p <= 0.05;="">=>*': p <= 0.01;="">=>*': p <= 0.001;="" '****':="" p="">=><=>=>
如果两组样本是配对且个数一致,例如癌和癌旁样本,则可以使用配对的差异表达分析,将参数paired设置为TRUE即可,如下使用配对的T检验: compare_means(len~supp, data = ToothGrowth, method = 't.test', paired = TRUE)
此时可见组间差异具有显著性了(p = 0.00255),对于绘图,可以使用上示的 ggboxplot ,也可以使用更针对性的 ggpaired ,如下,此处使用label = 'p.format'参数以显示数值型的p值,使用palette = 'lancet'重新配色: ggpaired(ToothGrowth, x = 'supp', y = 'len', color = 'supp', line.color = 'gray',
line.size = 0.4, palette = 'lancet') + stat_compare_means(method = 't.test', paired = TRUE, label = 'p.format', label.x = 1.35, label.y = 40)

2、多组间差异表达分析: 此处使用的分组为ToothGrowth中的dose列(组别为0.5、1、2),默认的多组间差异分析方法是Kruskal-Wallis,同样可以使用method参数设置为anova: compare_means(len~dose, data = ToothGrowth, method = 'anova')
对于绘图,可以指定标注哪些组间的差异分析显著性,如下: my_comparisons = list(c('0.5', '1'), c('1', '2'))
ggboxplot(ToothGrowth, x = 'dose', y = 'len', color = 'dose', palette = 'lancet')+
stat_compare_means(comparisons = my_comparisons) + # 子集p值
stat_compare_means(method = 'anova', label.x = 1.7, label.y = 45) # 整体的p值

需要注意的是: 1、对于其中的两组间差异分析,默认使用的仍然是Wilcoxon test检验,可以使用method参数设置为T检验 2、如果是有参考组(其他组均与参考组差异比较),可以直接使用ref.group参数设置参考组 ggboxplot(ToothGrowth, x = 'dose', y = 'len', color = 'dose', palette = 'lancet') +
stat_compare_means(method = 't.test', ref.group = '0.5', label = 'p.signif')

可见,在该例中如果不设定子集p值的label.y位置的话,会统一标在最高的y位置! 便捷以牺牲部分个性化为代价
|