查看原文
其他

神奇小工具丨ggplot绘图显著性添加工具---ggsignif

博文 生信者言 2022-03-29


在数据分析过程中,常常遇到需要把组间的显著性添加到图形中,但是在ggplot2中实现起来略显麻烦,幸运的是,在这个世界上有很多无私的大神,早就为我们想到了这一点。


今天给大家介绍一款ggplot2的插件:


ggsignif 是发表在github上的开源包,专门用于在box plot上添加显著性标签。

https://github.com/const-ae/ggsignif


使用之前要进行安装:


安装稳定版本:

install.packages("ggsignif")

 

安装最新开发版本:

devtools::install_github("const-ae/ggsignif")


睁大你的眼睛,看一波炫酷的案例图:





以上图例来源于ggsignif在github主页上的示例图


在讲绘图之前,先介绍一点统计分析的知识,我们在做差异性分析的时候,一般情况首先会判断数据是否符合正态分布,在这选择适合的统计方法:


R函数

描述

t.test()

比较两组(参数)

wilcox.test()

比较两组(非参数)

aov()或anova()

比较多组(参数)

kruskal.test()

比较多组(非参数)

 

ggsignif主要的一个函数是geom_signif(),他的使用方法和ggplot2中其他的geom_***()一样,作为图层添加到图形中就可以,他的主要参数如下表:


参数

说明

comparisons

list,设置需要比较的组

test

选择检验方法,t.test, wilcox.test

test.args

给test传入的参数

map_signif_level

bool值,如果为TRUE,显示方法为"***"=0.001,  "**"=0.01, "*"=0.05

step_increase

设置标注之间的距离


孙老湿举栗子


library(ggplot2)
library(ggthemr)     #载入上期介绍的主题配置包
library(ggsignif)    #载入ggsignif

 

我们使用iris数据集作为演示,iris数据集Species作为分类标签,Species有3个类别("versicolor"、"virginica"、"setosa"),用head(iris)查看数据集的前6行:



Species的三组两两分别作差异性检验,提前设定好配对分析的list:


compaired <- list(c("versicolor", "virginica"),     c("versicolor","setosa"),     c("virginica","setosa"))


绘制geom_boxplot():


ggthemr("flat") p <- ggplot(iris, aes(Species, Sepal.Width, fill = Species)) +    geom_boxplot() +    ylim(1.5, 6.5) +    geom_signif(comparisons = compaired,                step_increase = 0.3,                map_signif_level = F,                test = wilcox.test) p



绘制小提琴图geom_violin():


ggthemr("flat") p <- ggplot(iris, aes(Species, Sepal.Width, fill = Species)) +    geom_violin() +    ylim(1.5, 6.5) +    geom_signif(comparisons = compaired,                step_increase = 0.5,                map_signif_level = F,                test = wilcox.test) p


 

修改参数map_signif_level=TRUE:


ggthemr("flat") p <- ggplot(iris, aes(Species, Sepal.Width, fill = Species)) +    geom_violin() +    ylim(1.5, 6.5) +    geom_signif(comparisons = compaired,                step_increase = 0.3,                map_signif_level = T,                test = wilcox.test) p





本系列课程主要侧重于讲解图形原理,以及在R中的实现过程,并没有特意追求美观,故很多图的细节部分修饰有限,大家重点理解实现过程。


有任何问题,欢迎在文末留言讨论。

 

扫码关注,获取更多精彩内容

关注公众号后:


回复文字:好好学习,收听喜马拉雅FM电台栏目《一分钟听懂NGS基础概念》,让生信分析不再遥不可及。


回复文字:果然科学,给你看另一篇好玩的文章。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存