【问题标题】:ggploting multiple graphs from a data listggploting 从数据列表中绘制多个图形
【发布时间】:2013-03-09 22:47:41
【问题描述】:

我想按照这篇文章的内容做一些事情:R: saving ggplot2 plots in a list 问题是我无法让它工作。我似乎能够获得单独的图表,但 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)

}

链接到数据的dputmt1

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

【问题讨论】:

  • mt1 是一团糟(见names(mt1)),你是从其他data.frame 获得的吗?
  • 另外,标题和您的 for 循环表明您认为 mt1 应该是 data.frames 的列表,对吗? (不是)
  • 是的,我明白你的意思。 dputdget 导入导出有点搞砸了。它应该是一个变量list[5]
  • 这是一个不同的问题;对于这个问题,请尝试在此处发布一些具有您认为数据应该具有的结构的模型数据
  • 我知道出了什么问题。我试图用head(mt1, n = 10L) 削减文件,但由于它是一个列表,它不想削减它所以我首先将它转换为data.frame

标签: r for-loop ggplot2


【解决方案1】:

如果我们由于数据框中缺少变量而忽略了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)
})

【讨论】:

  • 我编辑了帖子以反映一些改进/建议,而不是写一个多余的答案(那将是一半)。希望你不要介意。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 2021-11-03
  • 2016-02-06
  • 2020-03-17
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
相关资源
最近更新 更多