Turning your ggplot2 code into a function

If you find yourself repeatedly writing the same ggplot2 code to create a data visualization in R, then it’s time to put your code into a function.

You may start out with an implementation similar to this one.

library(ggplot2)
theme_set(ggcharts::theme_hermit(grid = "XY"))
data("mtcars")

scatter_plot <- function(data, x, y) {
  ggplot(data, aes(x, y)) +
    geom_point(color = "yellow")
}

That won’t work though.

scatter_plot(mtcars, hp, mpg)
## Error in FUN(X[[i]], ...): object 'hp' not found

If you call this function, R will look for a variable called hp rather than looking for a column with that name inside the data frame you passed as the first argument.

So, maybe it works when putting the column names in quotes?

scatter_plot(mtcars, "hp", "mpg")

Well, no error this time but that most likely did not produce what you expected.

The key to making this work is to tell R somehow that it should look for the x and y arguments inside data. How can you achieve this? Using {{ }} (speak curly-curly) from the rlang package.

scatter_plot2 <- function(data, x, y) {
  ggplot(data, aes({{x}}, {{y}})) +
    geom_point(color = "yellow")
}
scatter_plot2(mtcars, hp, mpg)

There you have it: that’s how you can create your own custom plotting function on top of ggplot2.

Want to see the power of custom plotting functions in action? Make sure to check out my ggcharts package.