是否有一种简单的方法,可以通过对grid。*函数和视口操作的一系列调用来获取任意函数,如下面的第一个函数,并取回gTree / grob对象(如第二个函数生成的对象)?
我问,因为使用grid。*函数逐步创建图要比使用相当笨拙的语法来创建复杂的gTree容易得多。但是,当您需要在较大的绘图元素或组合绘图中使用绘图时,我倾向于将它们以gTree形式而不是自己写入绘图设备。
一段时间以来,我一直在苦苦挣扎grid
,即使在深入研究文档之后,我仍觉得自己错过了一些东西,似乎必须有一种更简单的方法来创建复杂的gTree ?
library(grid)
plotter <- function(x){
pushViewport(viewport(gp = gpar(fill = "white", col = "black", lwd = 2)))
grid.rect(
width = 0.3, height = 0.8,
gp = gpar(fill = "red")
)
}
grid.newpage()
plotter()
plotter2 <- function(x) {
g <- gTree()
g <- addGrob(
g,
rectGrob(
width = 0.3, height = 0.8,
gp = gpar(fill = "red"),
vp = "vp"
)
)
g$childrenvp <- viewport(name = "vp", gp = gpar(fill = "white", col = "black", lwd = 2))
g
}
grid.newpage()
grid.draw(plotter2())
答案 0 :(得分:0)
grid.grab()
函数允许您在生成图形的绘图代码调用后将其捕获为gTree
。
grid.grabExpr()
函数允许捕获gTree
,而无需从描述它的表达式中进行绘制,如下所示:
library(grid)
plotter <- function(x) {
grid.grabExpr(expr = {
pushViewport(viewport(gp = gpar(fill = "white", col = "black", lwd = 2)))
grid.rect(
width = 0.3, height = 0.8,
gp = gpar(fill = "red")
)
})
}
grid.newpage()
grid.ls(plotter()) # to see the structure of the gTree
grid.draw(plotter())