如何创建ggplot列表

时间:2014-04-02 16:20:04

标签: r ggplot2

我一直在尝试创建返回ggplot列表并且遇到各种问题的函数。然而,从根本上说,我不明白为什么这是TRUE

"data.frame" == class(c(qplot(1:10,rnorm(10)))[[1]])

这是[TRUE,TRUE]

c('gg','ggplot') == class(qplot(1:10,rnorm(10))) 

我没有看到任何类似的问题。我看到了诸如

之类的问题所解决的各种问题
lapply(someList, function(x) {
  #make ggplot, then use print(...) or whatever
  })

所以我猜测有一些关于将ggplot对象从函数或环境之间传递出去的东西。感谢关于我缺少的ggplot或R的任何线索。

2 个答案:

答案 0 :(得分:7)

library(ggplot2)
p = c(qplot(1:10,rnorm(10)))
p2 = qplot(1:10,rnorm(10))

p[[1]](与p[['data']])相同)应该是dataframe。它通常包含绘图的数据。

plist,因为您使用了c功能。

p2ggplot,因为qplot返回的是什么。

查看每个对象的属性。

attributes(p)
# $names
# [1] "data"        "layers"      "scales"      "mapping"     "theme"       "coordinates"
# [7] "facet"       "plot_env"    "labels"  

attributes(p2)
# $names
# [1] "data"        "layers"      "scales"      "mapping"     "theme"       "coordinates"
# [7] "facet"       "plot_env"    "labels"     
# 
# $class
# [1] "gg"     "ggplot"

要存储多个ggplot个对象,请使用list

ggplot.objects = list(p2,p2,p2)

c帮助文件 表明ggplot不是可能的输出。 它还说明了

  

c有时用于删除属性的副作用   除名称外,例如将数组转换为向量

如果你想要的话 c要返回ggplot个对象,那么您可以尝试定义自己的c.ggplot 功能。您必须阅读有关S3和S4功能的详细信息,以了解其中的内容 继续。

答案 1 :(得分:3)

如果在全局环境中有几个ggplot对象,可以使用以下命令列出它们:

ggplot_list <- Filter(function(x) is(x, "ggplot"), mget(ls()))