Modifying the decimal mark of stat_poly_eq

627 Views Asked by At

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)
3

There are 3 best solutions below

1
On BEST ANSWER

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

3
On
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!

0
On

'ggpmsic' 0.5.2 is now in CRAN. Bug fixed (I hope) Important: because of the way 'ggplot2' works the option must be set to the desired decimal marker when the plots is rendered (printer or exported to a graphical format). (The option as set when the gg object is created or saved to a variable does not affect the object itself.)

library(ggpmisc) # version >= 0.5.2
#> Loading required package: ggpp
#> Loading required package: ggplot2
#> 
#> Attaching package: 'ggpp'
#> The following object is masked from 'package:ggplot2':
#> 
#>     annotate

old.option <- options(OutDec = ",")

ggplot(mpg, aes(y = displ, x = hwy)) +
  geom_point(alpha = 0.5, color = "cadetblue") +
  geom_smooth(method = "lm", se = F, color = "black", linewidth = 0.5) +
  stat_poly_eq(aes(label = paste(after_stat(eq.label),
                                 after_stat(rr.label),
                                 sep = "*plain(\";\")~~")),
               coef.digits = 3)
#> `geom_smooth()` using formula = 'y ~ x'

options(old.option)

The plot using the new vesrion of 'ggpmisc'

I also replaced size with linewidth to avoid a warning from 'ggplot2' 3.4.0, and changed the comma in sep to a semicolon as it seems better when the decimal mark is a comma.

Created on 2022-12-20 with reprex v2.0.2