使用 geom_bar by bar 为 ggplot 添加统计显着性
Add statistical significance to ggplot with geom_bar by bar
我在 R 中表示一个带有 geom_bar 的条形图,它显示两个离散的 x 水平和一个连续的 y 水平面。我想用星星来显示堆叠在一个位置的组之间的显着性水平(p 值)。
我通常用stat_compare_means来进行组间比较,但是当组堆在一起而不是相邻的时候我就不能表示了。
我的代码与下面发布的代码类似。我想通过比较 B 的值在每一列的顶部添加开始。我想要表示的统计数据是下面用 compare_means
计算的统计数据
library(tidyverse)
library(ggpubr)
dataplot <-
data.frame(
A = rep(c("A1", "A2"), 8),
B = rep(c(rep("B1", 4), rep("B2", 4)),2),
C = c(rep("C1",8), rep("C2",8)),
value = rep(c(1, 5, 2, 6, 8, 15, 9, 16),2)
)
ggplot(dataplot, aes(A, value, fill = B, color = B)) +
geom_bar(
position = "identity",
stat = "summary",
alpha = .5,
fun = mean
) +
geom_point(
aes(x = A),
size = 2,
stroke = 0.5,
position = "jitter"
)+
facet_wrap(~C)
compare_means(value ~ B, group.by = c("A", "C"), data = dataplot, method = "t.test")
这是我的情节:
这是获得的数据。
# A tibble: 4 x 10
A C .y. group1 group2 p p.adj p.format p.signif method
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
1 A1 C1 value B1 B2 0.0101 0.02 0.010 * T-test
2 A2 C1 value B1 B2 0.00496 0.02 0.005 ** T-test
3 A1 C2 value B1 B2 0.0101 0.02 0.010 * T-test
4 A2 C2 value B1 B2 0.00496 0.02 0.005 ** T-test
这就是我想要的:
我已经读过Put stars on ggplot barplots and boxplots - to indicate the level of significance (p-value),但是当这些组被起球时,这个解决方案对我不起作用,只有当它们彼此相邻时
一个选项是通过创建向量来定义重要符号的 y 位置。您可以使用 geom_text
和 label
来分配栏顶部的文本,如下所示:
library(tidyverse)
library(ggpubr)
stats <- compare_means(value ~ B, group.by = c("A", "C"), data = dataplot, method = "t.test")
ggplot(dataplot, ) +
geom_bar(aes(A, value, fill = B, color = B),
position = "identity",
stat = "summary",
alpha = .5,
fun = mean
) +
geom_point(
aes(x = A, y = value, fill = B, color = B),
size = 2,
stroke = 0.5,
position = "jitter"
)+
geom_text(data = stats, aes(x = A, y = c(9, 16, 9, 16), label = p.signif), size = 10) +
facet_wrap(~C)
输出:
我在 R 中表示一个带有 geom_bar 的条形图,它显示两个离散的 x 水平和一个连续的 y 水平面。我想用星星来显示堆叠在一个位置的组之间的显着性水平(p 值)。 我通常用stat_compare_means来进行组间比较,但是当组堆在一起而不是相邻的时候我就不能表示了。
我的代码与下面发布的代码类似。我想通过比较 B 的值在每一列的顶部添加开始。我想要表示的统计数据是下面用 compare_means
计算的统计数据library(tidyverse)
library(ggpubr)
dataplot <-
data.frame(
A = rep(c("A1", "A2"), 8),
B = rep(c(rep("B1", 4), rep("B2", 4)),2),
C = c(rep("C1",8), rep("C2",8)),
value = rep(c(1, 5, 2, 6, 8, 15, 9, 16),2)
)
ggplot(dataplot, aes(A, value, fill = B, color = B)) +
geom_bar(
position = "identity",
stat = "summary",
alpha = .5,
fun = mean
) +
geom_point(
aes(x = A),
size = 2,
stroke = 0.5,
position = "jitter"
)+
facet_wrap(~C)
compare_means(value ~ B, group.by = c("A", "C"), data = dataplot, method = "t.test")
这是我的情节:
这是获得的数据。
# A tibble: 4 x 10
A C .y. group1 group2 p p.adj p.format p.signif method
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
1 A1 C1 value B1 B2 0.0101 0.02 0.010 * T-test
2 A2 C1 value B1 B2 0.00496 0.02 0.005 ** T-test
3 A1 C2 value B1 B2 0.0101 0.02 0.010 * T-test
4 A2 C2 value B1 B2 0.00496 0.02 0.005 ** T-test
这就是我想要的:
我已经读过Put stars on ggplot barplots and boxplots - to indicate the level of significance (p-value),但是当这些组被起球时,这个解决方案对我不起作用,只有当它们彼此相邻时
一个选项是通过创建向量来定义重要符号的 y 位置。您可以使用 geom_text
和 label
来分配栏顶部的文本,如下所示:
library(tidyverse)
library(ggpubr)
stats <- compare_means(value ~ B, group.by = c("A", "C"), data = dataplot, method = "t.test")
ggplot(dataplot, ) +
geom_bar(aes(A, value, fill = B, color = B),
position = "identity",
stat = "summary",
alpha = .5,
fun = mean
) +
geom_point(
aes(x = A, y = value, fill = B, color = B),
size = 2,
stroke = 0.5,
position = "jitter"
)+
geom_text(data = stats, aes(x = A, y = c(9, 16, 9, 16), label = p.signif), size = 10) +
facet_wrap(~C)
输出: