其实这个包的用法主要是用来丰富ggplot2画图的更多美化,如果两个分组之间存在显著性不同,这个包提供一个简单的方式去标示。
比如我们想要如下的效果图:

图上标注了每个组之间的p值,感觉很不错。这样的话我们如何实现呢?我们可以借助ggsignif包来实现它。
首先我们安装一下ggsignif包
install.packages("ggsignif")或者
devtools::install_github("const-ae/ggsignif")这个很简单。
其次我们了解一下其统计方法和参数
统计方法
一般根据数据是否符合正态分布,选择合适的统计方法:
统计方法 | 适用情况 |
---|---|
t.test() | 比较两组(参数) |
wilcox.test() | 比较两组(非参数) |
aov()或anova() | 比较多组(参数) |
kruskal.test() | 比较多组(非参数) |
参数
ggsignif包主要函数为:geom_signif()和stat_signif(),常用geom_signif()。
常用参数如下:
参数 | 说明示范 |
---|---|
comparisons | list,设置需要比较的组,比如list(c("a","b"),c("a","c")) |
test | 上述统计方法,比如t.test() |
test.args | test传入的参数 |
map_signif_level | 布尔值,p值直接被当作注释或者以星号替代,比如c(""=0.001,""=0.01,""=0.05) |
annotations | 带有可选注释的字符向量,如果没有则被忽略 |
step_increase | 不同组差异标注的间隔 |
测试
接下来我们来测试一下
1. 测试数据集test

test数据集两列,一列是基因表达量,一列是分组。

2. 差异分析分组
compaired <- list(c("a", "b"),c("a","c"),c("a","d"))
3. 画图
ggplot(test,aes(group,exp,fill=group))+geom_boxplot(width=0.5)+theme(plot.title=element_text(size = 25),axis.text.x=element_text(size=15,angle=0),axis.text.y=element_text(size=15),axis.title.x=element_text(size = 23),axis.title.y=element_text(size = 23))+labs(x='Gene', y= 'Expression')+geom_signif(comparisons = compaired,step_increase = 0.1,map_signif_level = F,test = t.test)

这里我们重点关注一下geom_signif(comparisons = compaired,step_increase = 0.1,map_signif_level = F,test = t.test)的用法
其实是在原有ggplot画图的基础上,添加了这一行语句,comparisons的设置可以根据自己感兴趣的对比组进行设置,map_signif_level则表示是否将p值直接当成注释,这个参数大家可以换一下看看效果。
我们再来一个例子
数据集是

接下来我们来画图
library("ggsignif")
# geom_signif()
# compare_means(value ~ group, data = exprSet_L,method="wilcox.test", paired=FALSE)
my_comparisons <- list(c("T1","T2"), c("T1","T3"),c("T1", "T4"))
ggplot(exprSet_L,aes(group,value,fill=group))+
geom_boxplot(width=0.5)+
theme(plot.title=element_text(size = 25),axis.text.x=element_text(size=25,angle=0),axis.text.y=element_text(size=25),axis.title.x=element_text(size = 25),axis.title.y=element_text(size = 25))+
labs(x=gene_name, y= 'Expression')+
geom_signif(comparisons = my_comparisons,step_increase = 0.1,map_signif_level = F,test = t.test,size=2,textsize = 6)
# theme_set(theme_set(theme_bw(base_size=22)))
# wilcox.test
# geom_signif(mapping = NULL, data = NULL, stat = "signif",
# position = "identity", na.rm = FALSE, show.legend = NA,
# inherit.aes = TRUE, comparisons = NULL, test = "wilcox.test",
# test.args = NULL, annotations = NULL, map_signif_level = FALSE,
# y_position = NULL, xmin = NULL, xmax = NULL, margin_top = 0.05,
# step_increase = 0, tip_length = 0.03, size = 0.5, textsize = 3.88,
# family = "", vjust = 0, ...)

是不是觉得这样的图瞬间高大上了一点呢?
其实还有很多新奇的画法,大家不妨尝试一下。
网友评论