В качестве альтернативы, без установки ggpubr
вы можете вычислить значение p за пределами ggplot2
и использовать функцию annotate
для добавления значения в график:
pval <- t.test(score1~Y_N,data = df)$p.value
library(ggplot2)
ggplot(df, aes(x = as.factor(Y_N), y = score1, fill = as.factor(Y_N), color = as.factor(Y_N)))+
geom_boxplot(alpha = 0.3, color = "black", outlier.shape = NA)+
geom_jitter(show.legend = FALSE)+
annotate(geom = "text", label = paste("p.value: ",round(pval,3)), x = 1.5, y = max(df$score1)*0.9)
РЕДАКТИРОВАТЬ: без коробочного графика
В качестве альтернативы боксплоту, если вы хотите иметь отдельные точки и столбец, представляющий среднее значение, вы можете сначала вычислить среднее значение для группы в наборе данных ne (здесь я использую пакет dplyr
для этого):
library(dplyr)
Mean_df <- df %>% group_by(Y_N) %>% summarise(Mean = mean(score1))
# A tibble: 2 x 2
Y_N Mean
<int> <dbl>
1 0 2640.
2 1 8972.
Затем вы можете построить отдельные точки, используя geom_jitter
, а среднее значение, используя geom_errobar
: вызов нового набора данных Mean_df
:
library(ggplot2)
ggplot(df, aes(x = as.factor(Y_N), y = score1))+
geom_jitter(show.legend = FALSE, width = 0.2)+
geom_errorbar(inherit.aes = FALSE, data = Mean_df,
aes(x = as.factor(Y_N),ymin = Mean, ymax = Mean),
color = "red",width = 0.2)+
annotate(geom = "text", label = paste("p.value: ",round(pval,3)),
x = 1.5, y = max(df$score1)*0.9)
Воспроизводимый пример
structure(list(Name = c("Alabama", "Alaska", "Arizona", "Arkansas",
"California", "Colorado", "Connecticut", "Delaware", "Florida",
"Georgia", "Hawaii", "Idaho"), Y_N = c(0L, 0L, 1L, 1L, 1L, 0L,
1L, 0L, 1L, 1L, 0L, 1L), FIPS = c(1L, 2L, 4L, 5L, 6L, 8L, 9L,
10L, 12L, 13L, 15L, 16L), score1 = c(2633L, 382L, 2695L, 2039L,
27813L, 8609L, 5390L, 858L, 14172L, 9847L, 720L, 845L), score2 = c(8L,
1L, 41L, 10L, 524L, 133L, 111L, 3L, 215L, 308L, 0L, 7L)), row.names = c(NA,
-12L), class = c("data.table", "data.frame"))