Регулировка высоты p-значений, полученных с помощью ggpubr, вручную с помощью фасетных графиков

Используя следующий код, я создаю фасетные графики со значениями 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 должны автоматически регулироваться в соответствии с высотой наивысшей точки в каждом сравнении). Любая помощь или указатели о том, как это сделать, были бы очень признательны!


person John Gagnon    schedule 04.10.2017    source источник


Ответы (2)


Решение, которое я нашел, - это увеличить соотношение высоты к ширине.

person Chuanxin    schedule 04.04.2018

Итак, спустя почти 3 года, вот ваш ответ на эту проблему. У меня была такая же проблема, и буквально сегодня, 4 мая 2020 года, выпущена ggpubr версия 0.3.0, которая позволяет включить vjust в stat_compare_means. Это позволяет перемещать эти звездочки значимости или значения p для перемещения вверх или вниз.

     stat_compare_means(comparisons = my_comparisons, 
                       label = "p.signif", 
                       vjust = 0.5)
person ilyas    schedule 04.05.2020