Home > Blockchain >  Modifying the decimal mark of stat_poly_eq
Modifying the decimal mark of stat_poly_eq

Time:12-16

I use the stat_poly_eq function from the ggpmisc package to add the regression equation in my ggplots. It works perfectly. However, I'd like to change the decimal mark of the equation from period to comma, and I can't figure out how to do this. Any suggestions?

data(mpg)

ggplot(mpg, aes(y = displ, x = hwy))  
  geom_point(alpha = 0.5, color = "cadetblue")  
  geom_smooth(method = "lm", se = F, color = "black", size = 0.5)  
  stat_poly_eq(aes(label = paste(after_stat(eq.label),
                                 after_stat(rr.label),
                                 sep = "*plain(\",\")~~")),
               coef.digits = 3)

CodePudding user response:

You can simply swap the periods for commas using gsub in the rr.label. The eq.label is parsed as an expression, so the period needs to be replaced with something like *paste(',')* for this to work:

ggplot(mpg, aes(y = displ, x = hwy))  
  geom_point(alpha = 0.5, color = "cadetblue")  
  geom_smooth(method = "lm", se = F, color = "black", size = 0.5)  
  stat_poly_eq(aes(label = paste(gsub('\\.', "*paste(',')*", 
                                      after_stat(eq.label)),
                                 gsub('\\.', ",", after_stat(rr.label)),
                                 sep = "*plain(\",\")~~")),
               coef.digits = 3, size = 6)

enter image description here

CodePudding user response:

data(mpg)
library(ggpmisc)

my_formula <- y ~ x
myformat <- "y = %s %s x, R²: %s"

ggplot(mpg, aes(y = displ, x = hwy))  
  geom_point(alpha = 0.5, color = "cadetblue")  
  geom_smooth(method = "lm", se = F, color = "black", size = 0.5)  
  stat_poly_eq(
    formula = my_formula, output.type = "numeric",
    mapping = aes(
      label = 
        sprintf(
          myformat,
          format(stat(coef.ls)[[1]][[1, "Estimate"]], digits = 3, decimal.mark = ","),
          format(stat(coef.ls)[[1]][[2, "Estimate"]], digits = 2, decimal.mark = ","),
          format(stat(r.squared), digits = 2, decimal.mark = ",")))
  ) 

I have elaborated my answer based on this post.

I hope this helps you!

  • Related