【问题标题】:Generate multiple graphics from within an R function从 R 函数中生成多个图形
【发布时间】:2017-03-03 15:48:07
【问题描述】:

我想使用 ggplot 图形从 R 中的一个函数中生成几个图形窗口...

testf <- function(a, b) {
  devAskNewPage(TRUE)
  qplot(a, b);
  # grid.newpage(recording = TRUE)
  dev.new()
  qplot(a, a+a);
  # grid.newpage(recording = TRUE)
  dev.new()
  qplot(b, b+b);
}

library(ggplot2)

x <- rnorm(50)
y <- rnorm(50)
testf(x, y)

然而,dev.new() 和 grid.newpage() 似乎都没有刷新前面的情节。

我知道,在 R 中,函数通常只产生它们评估的最后一个东西,但我想更好地理解这个过程并了解任何可能的解决方法。

想法?

【问题讨论】:

  • 也许 R 常见问题 7.22 cran.r-project.org/doc/FAQ/…
  • @rcs 您的评论回答了这个问题。把它写成答案,以便它可以被接受。
  • rcs 评论建议某人不要阅读常见问题解答;)
  • 我不确定我是否应该能够发现这个...“7.22 为什么格子/格子图形不起作用?”几乎没有谈到我关于 ggplot 和输出的问题。常见问题解答仅在索引良好并提及某人可能搜索的所有可能关键短语时才有效。
  • 我同意你的看法。在您的情况下,您的问题和 FAQ7.22 之间没有直接联系。另一方面,您的问题不是“刷新前面的情节”,因为如果您例如写信给png,那么两个情节都将为空。然后你可能会问“为什么我的 ggplot2 不工作?”。

标签: r ggplot2 r-faq


【解决方案1】:

lattice 和 ggplot2 中基于 grid 的图形函数创建一个图形对象,但不显示它。图形对象的print() 方法产生实际显示,即,

print(qplot(x, y))

解决问题。

R FAQ 7.22

【讨论】:

  • 您的建议是正确的,但它与网格无关 - 这只是编程风格的决定。
  • +1:这让我难过了 30 分钟。这个问题非常重要,值得重现:"图形对象的 print() 方法需要生成实际显示。当您在命令中交互使用(ggplot2、网格等)函数时行,结果会自动打印,但在 source() 或您自己的函数中,您将需要一个显式的 print() 语句。"
猜你喜欢
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多