使用网格获取绘制时视口的宽高比

时间:2015-01-09 12:16:30

标签: r graphics ggplot2

我需要开发一个新的网格grob,它是segmentsGrob的自定义,但允许以指定的长度终止绘图(即从末端切割1 cm的段)。由于计算是段的角度以及视口的纵横比(绝对测量)的函数。需要使用drawDetails钩子推送计算直到绘制时间。

我的问题是如何获得正在绘制grob的视口的绝对宽高比?我使用它的上下文是ggplot2,如果我查询current.viewport().widthcurrent.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, ...)
}

0 个答案:

没有答案