如何将 grob 剪辑到 grobTree 对象中

Posted

技术标签:

【中文标题】如何将 grob 剪辑到 grobTree 对象中【英文标题】:How to clip a grob into a grobTree object 【发布时间】:2020-03-23 03:43:30 【问题描述】:

在 R 网格图形中,如何在 grobTree 中剪辑 grob 对象?在某种程度上,我只需要调用grid.draw 来绘制剪裁的grob。

例如,当我直接绘制我的东西时:

# Direct plotting ----

library(grid)

grid.newpage()
vp <- viewport(x = 0.25, y = 0.25, width = 0.5,height = 0.5,
               just = c("left", "bottom"), name = "vp")
pushViewport(vp)

grid.rect()
grid.polygon(x = c(0.4,0.9, 1.4, 0.9), y = c(0.5, 0.75, 0.5, 0.25), 
             gp = gpar(lty = 3))

grid.clip()

grid.polygon(x = c(0.4,0.9, 1.4, 0.9), y = c(0.5, 0.75, 0.5, 0.25), 
             gp = gpar(fill = "grey"))

我得到了剪辑版:

但是当我尝试将其放入 grobTree 对象中(以供以后操作)时,它不起作用:


# Indirect plotting ----

library(grid)

aGrob <- grobTree()

vp <- viewport(x = 0.25, y = 0.25,,width = 0.5,,height = 0.5,
               just = c("left", "bottom"), name = "vp")

r1 <- rectGrob(vp = vp)
p1 <- grid.polygon(x = c(0.4,0.9, 1.4, 0.9), y = c(0.5, 0.75, 0.5, 0.25), 
                   gp = gpar(lty = 3), vp = vp)

c1 <- clipGrob(vp = vp)

p2 <- grid.polygon(x = c(0.4,0.9, 1.4, 0.9), y = c(0.5, 0.75, 0.5, 0.25), 
                   gp = gpar(fill = "grey"), vp = vp)

aGrob <- grobTree(aGrob, r1, p1, c1, p2)

grid.newpage()

grid.draw(aGrob)

我得到一个未剪辑的版本:

我怎样才能在我的 grobTree 对象中拥有剪辑版本?

【问题讨论】:

【参考方案1】:

尝试在视口中使用clip = TRUE vp

【讨论】:

以上是关于如何将 grob 剪辑到 grobTree 对象中的主要内容,如果未能解决你的问题,请参考以下文章

如何从影片剪辑中调用对象

Fabric.js 将画布(或对象组)剪辑到多边形

在 OpenGL ES 中,如何将绘图“剪辑”到矩形?

从子视图中的路径对象在 UIView 中构建剪辑区域

如何从子 Slider 影片剪辑访问父项中定义的对象

如何从导入到数组的 png 中创建影片剪辑?