Home > Blockchain >  How can I use substitude within `geom_textabline`'s label?
How can I use substitude within `geom_textabline`'s label?

Time:05-05

I am trying to use substitute to substitute some values into the label text of geom_textabline. However, it is constantly giving me the following error:

Error in check_aesthetics(): ! Aesthetics must be either length 1 or the same as the data (1): label

I tried to convert the expression in the label to characters, or use paste to join etc. but none worked.

How can I use substitude within geom_textabline's label?

dSlope <- 2
gg <- ggplot(mtcars, aes(x=mpg, y=cyl))  
  #facet_wrap(Y~., scales = "free")  
  geom_textabline(label = substitute("r = -("*x~ frac(mu*m,s)*") t", list(x = sprintf("%.3f", abs(dSlope))))
                  , slope = dSlope, intercept = 0
                  , size = 0.36*fontSize, color = "black", hjust = 0.8, vjust = -0.2, show.legend = FALSE, parse = TRUE)
gg

Note: the above code is a simplied versions of a larger and more complicated code.

CodePudding user response:

The label generated by substitute is being interpreted as having length 3. A workaround is to deparse the substitute and use parse = TRUE:

library(geomtextpath)
#> Loading required package: ggplot2

dSlope <- 2
fontSize <- 16

ggplot(mtcars, aes(mpg, cyl))  
  geom_textabline(label = deparse(substitute("r = -("*x~ frac(mu*m,s)*") t", 
                                     list(x = sprintf("%.3f", abs(dSlope))))),
                  slope = dSlope, intercept = 0,
                  size = 0.36*fontSize, color = "black", parse = TRUE,
                  hjust = 0.4, vjust = -0.2, show.legend = FALSE)

Created on 2022-05-04 by the reprex package (v2.0.1)

  • Related