如何在箱线图的子组之间添加显着性条
How to add significance bar between subgroups of box plot
我想做一个 wilcox 检验,并为箱线图中的每个组(而不是组之间)添加一个显着性条。 IE。比较时间 2、6 和 14 的子组(“0”、“1”)。
这是我目前所拥有的:
WS = 时间
DV = 效果
计数 = 子组(“0”或“1”)
p <- ggplot(data, aes(x=WS, y=DV, group=count))
p <- p + geom_boxplot(aes(fill=factor(count), group=interaction(WS, count)))
p <- p + stat_summary(fun.y=median, geom="smooth", aes(group=factor(count), color =factor(count)))
p <- p + scale_x_continuous(breaks = c(2,6,14))
p
Output from code
添加时
p <- p + geom_signif(comparisons = list(c("0", "1")),
map_signif_level=TRUE,test='wilcox.test')
对于上面的内容,我得到以下错误:
Error in f(...) :
Can only handle data with groups that are plotted on the x-axis
我假设只有当数据在 x 轴上时才能进行比较。但是,我想保持现在的情节,x 轴上的时间为 2、6 和 14。我该如何解决?
从 ggsignif
的小插曲(参见 ??ggsignif
)我了解到,对于使用 position='dodge'
的图层(您的箱线图就是这种情况,因为您使用交互进行分组) 您需要自己提供位置和注释(标签)。
您可以这样计算所有值:
p <- ggplot(data, aes(x=WS, y=DV, group=count))
p <- p + geom_boxplot(aes(fill=factor(count), group=interaction(WS, count)))
p <- p + stat_summary(fun.y=median, geom="smooth", aes(group=factor(count), color =factor(count)))
p <- p + scale_x_continuous(breaks = c(2,6,14))
p.values <- sapply(split(data, data$WS), function(x){wilcox.test(DV~count, x)$p.value})
labels <- symnum(p.values, corr = FALSE, cutpoints = c(0, .001,.01,.05, 1), symbols = c("***","**","*","n.s."))
y.values <- sapply(split(data, data$WS), function(x){max(sapply(split(x, x$count), function(xx){boxplot(x$DV, plot=F)$stats[5, ]}))})+2
p <- p + geom_signif(y_position = y.values, xmin = unique(data$WS)-.4, xmax = unique(data$WS)+.4, annotations = labels)
p
这给出:
我想做一个 wilcox 检验,并为箱线图中的每个组(而不是组之间)添加一个显着性条。 IE。比较时间 2、6 和 14 的子组(“0”、“1”)。 这是我目前所拥有的:
WS = 时间
DV = 效果
计数 = 子组(“0”或“1”)
p <- ggplot(data, aes(x=WS, y=DV, group=count))
p <- p + geom_boxplot(aes(fill=factor(count), group=interaction(WS, count)))
p <- p + stat_summary(fun.y=median, geom="smooth", aes(group=factor(count), color =factor(count)))
p <- p + scale_x_continuous(breaks = c(2,6,14))
p
Output from code
添加时
p <- p + geom_signif(comparisons = list(c("0", "1")),
map_signif_level=TRUE,test='wilcox.test')
对于上面的内容,我得到以下错误:
Error in f(...) :
Can only handle data with groups that are plotted on the x-axis
我假设只有当数据在 x 轴上时才能进行比较。但是,我想保持现在的情节,x 轴上的时间为 2、6 和 14。我该如何解决?
从 ggsignif
的小插曲(参见 ??ggsignif
)我了解到,对于使用 position='dodge'
的图层(您的箱线图就是这种情况,因为您使用交互进行分组) 您需要自己提供位置和注释(标签)。
您可以这样计算所有值:
p <- ggplot(data, aes(x=WS, y=DV, group=count))
p <- p + geom_boxplot(aes(fill=factor(count), group=interaction(WS, count)))
p <- p + stat_summary(fun.y=median, geom="smooth", aes(group=factor(count), color =factor(count)))
p <- p + scale_x_continuous(breaks = c(2,6,14))
p.values <- sapply(split(data, data$WS), function(x){wilcox.test(DV~count, x)$p.value})
labels <- symnum(p.values, corr = FALSE, cutpoints = c(0, .001,.01,.05, 1), symbols = c("***","**","*","n.s."))
y.values <- sapply(split(data, data$WS), function(x){max(sapply(split(x, x$count), function(xx){boxplot(x$DV, plot=F)$stats[5, ]}))})+2
p <- p + geom_signif(y_position = y.values, xmin = unique(data$WS)-.4, xmax = unique(data$WS)+.4, annotations = labels)
p
这给出: