Search code examples
rggplot2geom-text

geom_text / geom_label with the bquote function


My data :

dat <- data_frame(x = c(1,2,3,4,5,6), y = c(2,2,2,6,2,2))

I wish to display this expression beside the point (x=4,y=6) :

expression <- bquote(paste(frac(a[z], b[z]), " = ", .(dat[which.max(dat$y),"y"] %>% as.numeric())))

But, when I am using this expression with ggplot :

ggplot() + 
  geom_point(data = dat, aes(x = x, y = y)) + 
  geom_label(data = dat[which.max(dat$y),], aes(x = x, y = y, label = expression))

I get this error message :

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

Solution

  • You could use the following code (keeping your definitions of the data and the expression):

    Not related to your question, but: it is always better to define aesthetics in the ggplot-call and get it reused in the subsequent function calls. If needed, you may override the definitions, like done below in geom_label

    ggplot(data = dat, aes(x = x, y = y)) + 
      geom_point() + 
      geom_label(data = dat[4,], label = deparse(expression), parse = TRUE, 
                 hjust = 0, nudge_x = .1)
    

    hjust and nudge_x are used to position the label relative to the point. One could argue to use nudge_y as well to get the whole label in the picture.

    yielding this plot:

    enter image description here

    Please let me know whether this is what you want.