grid.grab():使用点阵输出时 "wrap" 参数的奇怪行为
grid.grab(): strange behavior of "wrap" argument when working with lattice output
grid.grab()
捕获所有当前视口并将它们存储为 grob。理论上,通常在实践中,您现在可以使用 grid.grab()
存储图像以供以后绘制。但是我注意到在处理点阵输出时 grid.grab()
有一些奇怪的行为。它与wrap
参数有关:
- 当
wrap = TRUE
时,保存的 grob 应该会生成忠实于原始视口的绘图。但有时不会。
- 即使在使用
wrap = TRUE
时,grid.grab()
也会警告我使用 wrap = TRUE
。
下面是一个说明这些行为的最小示例:
library(grid)
library(lattice)
xyplot(1:5 ~ 1:5)
trellis.focus()
panel.abline(h = 3)
panel.abline(h = 5)
myGrob <- grid.grab(wrap = TRUE)
此时,我收到一个警告——
In grabDL(warn, wrap, ...) :
one of more grobs overwritten (grab WILL not be faithful; try 'wrap = TRUE')
—这很奇怪,因为我指定了 wrap = TRUE
.
我继续 运行宁
grid.newpage()
grid.draw(myGrob)
根据 Paul Murrell 的说法(R Graphics, 第二版,第 239 页),使用 grid.grab(wrap = TRUE)
是 "guaranteed to replicate the original output." 但事实并非如此。具体来说,顶部的水平线(来自 panel.abline(h = 5)
)不会被再现。
我在 R 3.3.2 和 3.5.1 中 运行 这个例子。在这两种情况下结果都是一样的。这些错误,还是我忽略了什么?
Paul Murrell answered the question 在 R-help 邮件列表中。简而言之,问题的出现是因为,在上面的示例中,代码创建了两个同名的 grob,进而导致 grid.grab()
出现问题。在他的回答中,Paul 建议一种解决方法是命名第二个 grob:替换
panel.abline(h = 5)
和
panel.abline(h = 5, identifier = "abline2")
没有问题。 (我已验证此解决方案有效。)Paul 还指出,即将推出的 grid.grab()
版本将能够更好地处理我上面描述的情况。
grid.grab()
捕获所有当前视口并将它们存储为 grob。理论上,通常在实践中,您现在可以使用 grid.grab()
存储图像以供以后绘制。但是我注意到在处理点阵输出时 grid.grab()
有一些奇怪的行为。它与wrap
参数有关:
- 当
wrap = TRUE
时,保存的 grob 应该会生成忠实于原始视口的绘图。但有时不会。 - 即使在使用
wrap = TRUE
时,grid.grab()
也会警告我使用wrap = TRUE
。
下面是一个说明这些行为的最小示例:
library(grid)
library(lattice)
xyplot(1:5 ~ 1:5)
trellis.focus()
panel.abline(h = 3)
panel.abline(h = 5)
myGrob <- grid.grab(wrap = TRUE)
此时,我收到一个警告——
In grabDL(warn, wrap, ...) :
one of more grobs overwritten (grab WILL not be faithful; try 'wrap = TRUE')
—这很奇怪,因为我指定了 wrap = TRUE
.
我继续 运行宁
grid.newpage()
grid.draw(myGrob)
根据 Paul Murrell 的说法(R Graphics, 第二版,第 239 页),使用 grid.grab(wrap = TRUE)
是 "guaranteed to replicate the original output." 但事实并非如此。具体来说,顶部的水平线(来自 panel.abline(h = 5)
)不会被再现。
我在 R 3.3.2 和 3.5.1 中 运行 这个例子。在这两种情况下结果都是一样的。这些错误,还是我忽略了什么?
Paul Murrell answered the question 在 R-help 邮件列表中。简而言之,问题的出现是因为,在上面的示例中,代码创建了两个同名的 grob,进而导致 grid.grab()
出现问题。在他的回答中,Paul 建议一种解决方法是命名第二个 grob:替换
panel.abline(h = 5)
和
panel.abline(h = 5, identifier = "abline2")
没有问题。 (我已验证此解决方案有效。)Paul 还指出,即将推出的 grid.grab()
版本将能够更好地处理我上面描述的情况。