如何在grid.newpage中使用R基础绘图?

6

grid 包的 grid.newpage 中“强制”使用 R 基础图是否可能? 例如,以下代码可以正常工作:

library(grid)
grid.newpage()
vp1 <- viewport(x=0,y=0.5,width=0.5, height=0.5, just = c("left", "bottom"))
vp2 <- viewport(x=0.5,y=0,width=0.5, height=0.5, just = c("left", "bottom"))
pushViewport(vp1)
grid.rect()
grid.text("vp1", 0.5, 0.5)
upViewport()
pushViewport(vp2)
grid.rect()
grid.text("vp2", 0.5, 0.5)

这里输入图片描述

但是,如果我尝试像这样做:

grid.newpage()
vp1 <- viewport(x=0,y=0.5,width=0.5, height=0.5, just = c("left", "bottom"))
vp2 <- viewport(x=0.5,y=0,width=0.5, height=0.5, just = c("left", "bottom"))
pushViewport(vp1)
grid.rect()
print(plot(1,2))
grid.text("vp1", 0.5, 0.5)
upViewport()
pushViewport(vp2)
grid.rect()
print(plot(1,2))

R基础绘图只是覆盖了grid.newpage。使用par(new=T)也没有帮助。

4
@詹姆斯 我已经学会了永远不要说R中的某些事情是不可能的。 - Andrie
2
由于grid的作者Paul Murrell编写的包gridbase,可以让您实现这一点。例如,请参阅vignette - Andrie
@Andrie 我纠正了!尽管我注意到基本差异仍然会带来一些限制。 - James
这是你的答案:https://dev59.com/nWcs5IYBdhLWcg3wPxce#13022137 - Andrie
@agstudy 是的。我也考虑过使用 grid 包作为一个全能绘图解决方案,当需要在一页上放置多个图形时。 - Mikko
显示剩余4条评论
1个回答

7

因为没有人回答这个问题,我来回答一下。就像Andrie说的那样,这个问题的答案在这里。你需要使用gridBase包中的gridFIG()函数,在plot.new()而不是grid.newpage()中绘制R基本图形:

library(grid)
library(gridBase)
plot.new()
vp1 <- viewport(x=0,y=0.5,width=0.5, height=0.5, just = c("left", "bottom"))
vp2 <- viewport(x=0.5,y=0,width=0.5, height=0.5, just = c("left", "bottom"))
pushViewport(vp1)
grid.rect()
grid.text("vp1", 0.5, 0.5)
par(new=TRUE, fig=gridFIG())
plot(1,2)
upViewport()
pushViewport(vp2)
grid.rect()
grid.text("vp2", 0.5, 0.5)
par(new=TRUE, fig=gridFIG())
plot(1,2)

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接