微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 ggplot2 boxplots 中的组内和组之间添加显着性条

如何解决在 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)

enter image description here

我知道我可以通过执行以下操作在每种类型的子类型之间(即在 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 参数显然接受列索引,但我不知道如何引用子类型索引。

我想要如下所示的内容

enter image description here

解决方法

这是一个基于 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)

example_1.png

编辑

您还可以调整标签以使其看起来“更干净”并添加其他几何图层,例如

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)

example_2.png

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。