ggplot2,你如何使用函数内的访问数据框元素?

时间:2013-05-15 20:25:19

标签: r ggplot2

我正在尝试使用ggplot2创建绘图,以标准化许多类似绘图的创建。鉴于你可以使用带有+运算符的theme(),stat _ *()或geom _ *()来堆叠许多选项,你如何将它包装在一个函数中?

我想创建一个函数来绘制数据框的各个部分,例如:

library(ggplot2)
test<-function(fdata,fx){
  p<-ggplot(fdata,aes(x=fx,y=mpg))+geom_point()
  print(p)}; 
test(mtcars,wt)

返回错误:

Error in eval(expr, envir, enclos) : object 'fx' not found

但是将美学定义更改为本地范围的变量(例如x = fx到x = wt)有效,但不会使用函数的第二个选项'fx':

library(ggplot2)
test<-function(fdata,fx){
  p<-ggplot(fdata,aes(x=wt,y=mpg))+geom_point()
  print(p)}; 
test(mtcars,wt)

如何编写函数以从数据框中的不同变量创建绘图?

E.g。我如何编写功能测试,以便我可以多次调用以获得类似的图,例如:

test(mtcars,'wt')  #scatter plot of wt x mpg
test(mtcars,'disp') #scatter plot of disp x mpg
test(mtcars,'hp')  #scatter plot of hp x mpg

1 个答案:

答案 0 :(得分:3)

这里的诀窍是使用aes_string而不是aes。前者允许你传递弦乐作为美学。这允许您传递包含美学字符串的变量,例如在绘制mtcars的情况下'wt'。您需要像这样修改代码:

library(ggplot2)
test <- function(fdata, fx) {
  p <- ggplot(fdata, aes_string(x = fx, y = "mpg")) + geom_point()
  print(p)
}
test(mtcars, "wt")