我需要开发一个新的网格grob,它是segmentsGrob的自定义,但允许以指定的长度终止绘图(即从末端切割1 cm的段)。由于计算是段的角度以及视口的纵横比(绝对测量)的函数。需要使用drawDetails钩子推送计算直到绘制时间。
我的问题是如何获得正在绘制grob的视口的绝对宽高比?我使用它的上下文是ggplot2,如果我查询current.viewport().width
或current.viewport().width
,我得到的是1npc(因此不是绝对度量)。
示例代码
segmentsGrob2 <- function(x0 = unit(0, "npc"), y0 = unit(0, "npc"), x1 = unit(1, "npc"), y1 = unit(1, "npc"), startAdjust = unit(0, 'npc'), endAdjust = unit(0, 'npc'), default.units = "npc", arrow = NULL, name = NULL, gp = gpar(), vp = NULL) {
if (!is.unit(x0))
x0 <- unit(x0, default.units)
if (!is.unit(x1))
x1 <- unit(x1, default.units)
if (!is.unit(y0))
y0 <- unit(y0, default.units)
if (!is.unit(y1))
y1 <- unit(y1, default.units)
grid.draw(grob(x0 = x0, y0 = y0, x1 = x1, y1 = y1, startAdjust=startAdjust, endAdjust=endAdjust, arrow = arrow, name=name, gp=gp, vp=vp, cl="segments2"))
}
drawDetails.segments2 <- function(x, ...) {
asp <- getVpAspect() ### <-THIS IS WHAT I NEED
# Do some modifications to x relative to asp
grid:::drawDetails.segments(x, ...)
}