【问题标题】:ggplot2, how do you use access dataframe elements from within the function?ggplot2,你如何在函数中使用访问数据框元素?
【发布时间】:2013-05-15 20:25:18
【问题描述】:

我正在尝试使用 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)

如何编写一个函数来根据数据框中的不同变量创建绘图?

例如如何编写函数测试以便我可以多次调用以获得类似的图,例如:

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

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 2014-01-28
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多