Search code examples
rggplot2ggpmisc

stat_poly_eq() red text for significant p-value in facetwrap


I have a series of regressions wrapped into facet_wrap and I'm wondering whether it is possible to denote the text for significant pvals with red text or a "*" inside of the stat_poly_eq() [ggpmisc] function?

Here is my sample code

ggplot(my.data, aes(x=age, y=logRR))+
  geom_hline(yintercept=0, linetype="dashed", color = "gray", size = 0.5) +
  geom_ribbon(aes(ymax=eCI_95, ymin=eCI_5), group=1, alpha=0.2, fill = "#BC1605") +
  geom_point(shape=19, size=3, color = "#BC1605") +
  geom_smooth(method='lm', se = T, formula=y~x, linetype='solid', size=0.5) +
  stat_poly_eq(formula = y ~ x, 
               aes(label = paste(..rr.label.., ..p.value.label.., sep = "*`,`~")), 
               parse = TRUE,
               label.x.npc = "right",
               vstep = 0.05) + # sets vertical spacing
  scale_color_manual(values=c("#000000", "#A4A4A4"), drop = FALSE) +
  scale_linetype_manual(values=c("solid","twodash"), drop = FALSE) +
  labs(y=expression(bold(Log(Diversity[MPA]/Diversity[REF])))) +
  labs(colour = 'Difference', linetype = 'Slope') +
  facet_wrap(mlpa_region~group, scales="free_y", nrow=3)+
  scale_x_continuous(breaks = seq(from=-5, to=19, by=2))+
  theme_classic() 

Solution

  • Yes, you can set colors with the ggtext package.

    library(ggplot2)
    library(ggpmisc)
    #> Loading required package: ggpp
    #> 
    #> Attaching package: 'ggpp'
    #> The following object is masked from 'package:ggplot2':
    #> 
    #>     annotate
    library(ggtext)
    
    set.seed(4321)
    x <- 1:100
    y <- (x + x^2 + x^3) + rnorm(length(x), mean = 0, sd = mean(x^3) / 4)
    my.data <- data.frame(x = x, 
                          y = y,
                          group = c("A", "B"))
    
    formula <- y ~ poly(x, 1, raw = TRUE)
    
    ggplot(my.data, aes(x, y)) + 
      facet_wrap(~ group) + 
      geom_point() +
      geom_smooth(method = "lm", formula = formula) +
      stat_poly_eq(formula = formula, geom = "richtext",
                   label.x = 30, label.y = 10e5,
                   mapping = aes(
                     label = ifelse(after_stat(r.squared) > 0.81, 
                                    paste0(
                                      "<span style='color:red'>", 
                                      after_stat(rr.label), 
                                      "</span>"
                                    ),
                                    paste0(
                                      "<span style='color:blue'>", 
                                      after_stat(rr.label), 
                                      "</span>"
                                    )
                     ),
                     label.color = NA)) 
    

    Created on 2022-06-02 by the reprex package (v2.0.1)