Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing a variable in a ggplot function

Tags:

r

ggplot2

I have a sample data below

data <- data.frame(yr = c(1999, 2000, 2001, 2002, 2003, 2004, 2005,
                          2006, 2007, 2009, 2010, 2011, 2012), 
                   ntemp =c (11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 12, 23))

When I try running this function, to access the variable inside a ggplot function.

FUN <- function(data, fun.y, yr) {
      fun.data <- data     
      ggplot(fun.data, aes(yr, fun.y)) +
      geom_point() +
      scale_y_continuous(fun.y)    
    }
    
FUN(data, "ntemp", yr)

I get an Error in eval(expr, envir, enclos) : object 'fun.y' not found

How can I solve this?

like image 256
Keniajin Avatar asked May 26 '26 14:05

Keniajin


1 Answers

aes only looks at the variables in data argument. If you would like to pass variable as an argument to FUN by its character name, use aes_string:

FUN <- function(data, x, y) {
  ggplot(data, aes_string(x=x, y=y)) + geom_point()
}

FUN(data, y="ntemp", x="yr")

A small correction: variable inside aes call should be defined in the scope where the ggplot object is evaluated, so technically a variable is looked up in data first, then in global environment (by default). See this and this questions.

like image 168
tonytonov Avatar answered May 28 '26 07:05

tonytonov



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!