Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gtable_add_grob():未显示linesGrob()_R_R Grid_Gtable - Fatal编程技术网

gtable_add_grob():未显示linesGrob()

gtable_add_grob():未显示linesGrob(),r,r-grid,gtable,R,R Grid,Gtable,为什么线(通过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,

为什么线(通过
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)
require(gtable)
基本两个原因:

  • 坐标位于视口之外

  • rectGrob绘制在顶部并遮罩它



谢谢你,巴蒂斯特。第二个原因很清楚,但第一个(?)。所有视口都有默认的
NULL
值,因此不应该像打开新页面时那样,仅在相应的矩形中绘制点。这件事我还不太明白。。。为什么(以及如何)我必须指定。。。在“经典”网格中,我会推动视口,然后它就可以工作了。GTTable的每个单元格都有一个视口,在其中绘制grob时,需要确保坐标适合视口。一个基本的例子是
grid.newpage();grid.lines(x=1:4,y=4:1,default.units=“npc”)
:它不绘制任何内容,因为
1:4
被解释为从0到1的标准化坐标。您需要重新缩放数据,或者指定视口并使用“本机”坐标。谢谢您的回答,Baptiste。重新缩放数据的解决方案也很有效(但不太直观/自然)。@Mariushofer我添加了一个更自然的版本,一次添加多个Grob,没有for循环。非常感谢,Baptiste,我会仔细看看。在
gTree
中首先汇总某些部分是否可以避免对
gTree
中的所有grob使用不同的名称?我问的原因是建议的解决方案在哪里为每个
rectGrob
textGrob
使用不同的名称。。。这很乏味。我希望所有
rectGrob
textGrob
lineGrob
都有一个名称,比如“panel”。
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)
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)