gpt4 book ai didi

r - gtable_add_grob() : linesGrob() not displayed

转载 作者:行者123 更新时间:2023-12-02 04:55:40 25 4
gpt4 key购买 nike

为什么下图中没有画线(通过 linesGrob)?

require(gtable)
base <- gtable(widths=unit(rep(1, 2), "null"),
heights=unit(rep(1, 3), "null"))
grid.newpage()
g <- 1
for(i in 1:3) {
for(j in 1:2) {
base <- gtable_add_grob(base,
grobs=list(linesGrob(x=1:4, y=4:1),
rectGrob(gp=gpar(fill="#FF0000")),
textGrob(label=g)), i, j, name=1:3)
g <- g+1
}
}
grid.draw(base)

最佳答案

两个原因:

  • 坐标落在视口(viewport)之外

  • rectGrob 绘制在顶部并遮盖它


require(gtable)
# let's fix this name before it's too late
gtable_add_grobs <- gtable_add_grob

base <- gtable(widths=unit(rep(1, 2), "null"),
heights=unit(rep(1, 3), "null"))
grid.newpage()
g <- 1
for(i in 1:3) {
for(j in 1:2) {
base <- gtable_add_grobs(base,
grobs=list(rectGrob(gp=gpar(fill="#FF0000")),
linesGrob(x=1:4, y=4:1, def="native",
vp=dataViewport(1:4, 1:4)),
textGrob(label=g)), i, j, name=1:3)
g <- g+1
}
}
grid.draw(base)

注意 gtable_add_grobs 是矢量化的,这意味着理想情况下您不必使用 for 循环。如果您首先将所有 grobs 分组在一起,对于给定的单元格,在 gTree 中会更容易。这是一个简化版本,

library(gtable)

g <- gtable(widths = unit(c(1,1), "null"),
heights = unit(c(1,1), "null"))


cell <- function(ii)
grobTree(rectGrob(),
linesGrob(1:4, 1:4, default.units="native"),
textGrob(ii),
vp=dataViewport(c(1,4), c(1,4)))

gl <- lapply(1:4, cell)

xy <- expand.grid(1:2, 1:2)

g <- gtable_add_grobs(g, gl,
l=xy[,1],
r=xy[,1],
t=xy[,2],
b=xy[,2])


grid.newpage()
grid.draw(g)

关于r - gtable_add_grob() : linesGrob() not displayed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18033568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com