0

我想按照这篇文章的内容做一些事情:R:将ggplot2图保存在列表 中问题是我无法让它工作。我似乎能够获得单独的图表,但facet_wrap抛出了一个错误。我会满足于只输出所有图形,然后将它们以 jpg 或其他格式保存到磁盘,以便稍后滚动浏览它们。

for(n in 1:5){
  pdata <- data.frame(mt1[n])
  library(ggplot2)
  p <-ggplot(pdata, aes(x=variable, y=value, color=Legend, group=Legend))+ geom_line()+ facet_wrap(~ color)

}

链接到dput数据:mt1

编辑:添加了整个正确的文件,它有点长

4

1 回答 1

3

如果我们facet由于数据框中缺少变量而忽略了错误,您可以使用以下方式生成图表并将其保存在不同的文件中ggsave

for(n in 1:5){
  pdata <- data.frame(mt1[n]) # better to use mt1[[n]]
  p <-ggplot(pdata, aes(x=variable, y=value, color=Legend, group=Legend))+ geom_line()
  ggsave(paste0("plot",n,".jpg"), p)
}

一些改进建议:

首先,正如@Dason 指出的那样,您的library(ggplot2)电话应该在您的循环之外。

其次,如果你通过 访问列表的元素[.],那么结果仍然是一个列表。您应该改为:[[.]]这将使data.frame(.)调用变得不必要(如上面代码中所述)。

第三是使用*apply函数族的建议。在这里,使用lapply.

总结代码中的所有这些要点:

require(ggplot2) # load package outside once
o <- lapply(seq_along(mtl), function(idx) {
    p <- ggplot(mtl[[idx]], aes(x = variable, y = value, 
              color = Legend, group = Legend))+ geom_line()
    ggsave(paste0("plot",idx,".jpg"), p)
})
于 2013-03-09T23:52:45.367 回答