Используя следующий код, я создаю фасетные графики со значениями p на основе сравнений.
library(ggpubr)
library(ggplot2)
library(dplyr)
library(stringr)
library(reshape2)
library(ggsci)
df <- melt(iris)
mycomparisons <- list(c("setosa", "versicolor"), c("setosa", "virginica"))
# Calculate the maximum value for each facetted plot to scale the axis limits
dmax = df %>% group_by(variable) %>%
filter(value==max(value, na.rm=TRUE))
# Determine the number of replicates to use for modifying a dummy dataframe for scaling the y axis limits
num_reps <- df %>% group_by(Species,variable) %>% tally()
times <- sum(num_reps$n[c(1:length(unique(df$Species)))])
# Create a dummy dataframe to use for manually adjusting the y axis limits
dumdum <- df
dumdum$value <- c(rep(0, times = 0.5*times), rep(dmax$value[1]*1.2, times = 0.5*times),
rep(0, times = 0.5*times), rep(dmax$value[2]*1.2, times = 0.5*times),
rep(0, times = 0.5*times), rep(dmax$value[3]*1.2, times = 0.5*times),
rep(0, times = 0.5*times), rep(dmax$value[4]*1.2, times = 0.5*times))
ggplot(data = df,
aes(x = Species, y = value, color = Species)) +
geom_boxplot(outlier.shape = NULL) +
geom_point() +
xlab("") +
scale_x_discrete(labels = function(x) str_wrap(x, width = 10)) +
scale_color_jco() +
facet_wrap(facets = "variable", scales = 'free_y') +
geom_blank(data = dumdum) +
theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(),
panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"),
aspect.ratio = 1, text = element_text(family="Helvetica")) +
stat_compare_means(paired = FALSE, method = 't.test', label = "p.signif",
show.legend = FALSE, comparisons = mycomparisons)
Однако, как вы можете видеть, значения p отсекаются по оси y. Я хотел бы иметь возможность переставлять их в зависимости от высоты максимального значения для данного сравнения (т.е. высота полосы сравнения и pvalue должны автоматически регулироваться в соответствии с высотой наивысшей точки в каждом сравнении). Любая помощь или указатели о том, как это сделать, были бы очень признательны!