水平connectGrob并不总是连接到盒子的边缘。Grob

时间:2019-09-25 00:12:15

标签: r grid grob gmisc

我正在运行示例here,并注意到将总计与不合格boxGrobs连接起来的水平箭头并不总是触及不合格boxGrob的左边缘。

这似乎取决于RStudio中查看窗口的宽度。垂直箭头似乎不是这种情况,垂直箭头似乎总是完美地连接到正确的boxGrob的顶部。

是否有一种方法可以迫使箭头触碰盒子的侧面而不走得更远?我正在尝试将输出保存为pdf,默认情况下,它似乎使用了更宽的绘图窗口,因此我所有的水平箭头都不与正确的框对齐。

狭窄的绘图窗口:

image

宽绘图窗口:

image

我尝试过手动创建面积更大的viewport,但这并没有改变pdf中的任何内容:

代码:

library(grid)
library(Gmisc)

vp <- grid::viewport(x = 10, y = 10, clip = 'on', xscale = c(0, 10), 
                     yscale = c(0, 10), default.units = 'inch') 
grid::pushViewport(vp)

leftx  <- .25
midx   <- .5
rightx <- .75
width  <- .4
gp <- gpar(fill = "lightgrey")

# add box/connectors to the plot
(total <- boxGrob("Total\n N = NNN", 
 x=midx, y=.9, box_gp = gp, width = width))
(rando <- boxGrob("Randomized\n N = NNN", 
 x=midx, y=.75, box_gp = gp, width = width))

connectGrob(total, rando, "v")

(inel <- boxGrob("Ineligible\n N = NNN", 
 x=rightx, y=.825, box_gp = gp, width = .25, height = .05))

connectGrob(total, inel, "-")

1 个答案:

答案 0 :(得分:1)

目前,可以使用绝对单位解决此问题。

示例代码:

(inel <- boxGrob("Ineligible\n N = NNN", 
                 x=rightx, y=.825, box_gp = gp, width = unit(2, "inch"), height = .05))