如何解决在 ggplot2 boxplots 中的组内和组之间添加显着性条
如果我有以下数据框,按类型和子类型组织:
df = rbind(
data.frame(type="A",subtype="c",value=rnorm(mean=1,100)),data.frame(type="B",value=rnorm(mean=1.5,data.frame(type="A",subtype="d",value=rnorm(mean=2,value=rnorm(mean=2.5,100))
)
我创建了一个箱线图,如下所示:
p = ggplot(df,aes(x=type,y=value,color=subtype)) +
geom_Boxplot(outlier.shape = NA)
我知道我可以通过执行以下操作在每种类型的子类型之间(即在 A.c 和 A.d 之间,然后也在 B.c 和 B.d 之间)添加显着性条:
p + ggpubr::stat_compare_means(test = 'wilcox.test',label = 'p.signif',show.legend = F)
如何在选择的列之间添加显着性条?例如。如果我想在 A.c 和 B.c 之间添加一个重要性栏,我该怎么做? 有什么方法可以调用列吗?
comparisons
函数的 ggpubr::stat_compare_means
参数显然接受列索引,但我不知道如何引用子类型索引。
我想要如下所示的内容:
解决方法
这是一个基于 ggsignif package 的潜在解决方案:
library(tidyverse)
library(ggsignif)
df = rbind(
data.frame(type="A",subtype="c",value=rnorm(mean=1,100)),data.frame(type="B",value=rnorm(mean=1.5,data.frame(type="A",subtype="d",value=rnorm(mean=2,value=rnorm(mean=2.5,100))
)
df$interaction <- factor(interaction(df$type,df$subtype),levels = c("A.c","A.d","B.c","B.d"))
ggplot(df,aes(x=interaction,y=value)) +
geom_boxplot(aes(colour = subtype),outlier.shape = NA) +
geom_signif(comparisons = list(c("A.c","B.c"),c("A.c","A.d"),c("B.c","B.d"),c("A.d","B.d")),test = "wilcox.test",step_increase = 0.075,map_signif_level = TRUE,tip_length = 0)
编辑
您还可以调整标签以使其看起来“更干净”并添加其他几何图层,例如
library(tidyverse)
library(ggsignif)
library(ggbeeswarm)
df = rbind(
data.frame(type="A",100))
)
df$Category <- factor(interaction(df$type,labels = c("Type A\nSubtype c","Type A\nSubtype d","Type B\nSubtype c","Type B\nSubtype d"))
ggplot(df,aes(x=Category,outlier.shape = NA) +
geom_signif(comparisons = list(c("Type A\nSubtype c","Type B\nSubtype c"),c("Type A\nSubtype c","Type A\nSubtype d"),c("Type B\nSubtype c","Type B\nSubtype d"),c("Type A\nSubtype d","Type B\nSubtype d")),tip_length = 0) +
geom_quasirandom(aes(fill = type),shape = 21,groupOnX = TRUE,size = 2,alpha = 0.5) +
scale_fill_viridis_d(option = "D",begin = 0,end = 0.3)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。