ggplot迭代了几列

时间:2014-11-07 16:34:13

标签: r ggplot2 apply lapply

  lapply(7:12, function(x) ggplot(mydf)+geom_histogram(aes(mydf[,x])))

会出错[{1}}。

我使用了几个SO问题(例如this)作为指导,但无法弄清楚我的错误。

1 个答案:

答案 0 :(得分:1)

以下代码适用于mtcars数据集。只需将mtcars替换为mydf

library(ggplot2)
lapply(1:3,function(i) {
  ggplot(data.frame(x=mtcars[,i]))+
    geom_histogram(aes(x=x))+
    ggtitle(names(mtcars)[i])
  })

注意对i(列索引)的引用是如何从mapping参数(对aes(...)的调用)移动到data参数的。

你的问题其实非常微妙。 ggplot首先在您的数据上下文中评估aes(...)的参数 - 例如它在mydf中查找列名称。如果失败则跳转到全局环境。它没有在功能环境中查看。有关此行为的另一个示例和一些讨论,请参阅this post

底线是在调用aes(...)时使用外部变量是一个非常糟糕的主意。但是,data=...参数不会受此影响。如果您必须参考列号等,请在致电ggplot(data=...)

时进行