Search code examples
rggplot2tidyeval

ggplot2 Variable Name with Spaces and tidyeval Syntax


I am trying to create a function which allows column names to be passed in by the user and I find that the resulting plot is simply one dot in the middle of screen. What needs to change for it to work as intended? My minimalist example is:

library(ggplot2)
weather <- data.frame(Month = month.name[1:5], `Low Temperature` = 20:16,
                      `High Temperature` = seq(30, 22, -2), check.names = FALSE)

xVariable <- "Month"
yVariable <- "High Temperature"
yVariable <- enquo(yVariable)
ggplot(weather, aes(x = xVariable, y = !!yVariable)) + geom_point()

Solution

  • Because it's quoted text, instead of enquo, use rlang::sym

    xVariable <- "Month"
    yVariable <- "High Temperature"
    fun <- function(dat, xvar, yvar) {
      xvar <- rlang::sym(xvar)
      yvar <- rlang::sym(yvar)
      p1 <-dat %>%
        ggplot(aes(x = !!xvar, y = !!yvar)) +
        geom_point()
      return(p1)
      
    }
    
    
    fun(weather, xVariable, yVariable)
    

    enter image description here