文本grob上的widthDetails()并不注意字体大小 - 解决方法?

时间:2016-08-26 15:16:53

标签: r r-grid

widthDetails网格实用程序应用于文本grob时,似乎不会注意字体大小。

> version$version.string
[1] "R version 3.3.1 (2016-06-21)"
> library(grid)
> widthDetails(textGrob(label="abcdef", gp=gpar(fontsize=12)))
[1] 0.5inches
> widthDetails(textGrob(label="abcdef", gp=gpar(fontsize=8.8)))
[1] 0.5inches

实际上,检查代码的(暴露部分),看起来它完全忽略了per-grob图形参数。

> grid:::widthDetails.text
function (x) 
{
    bounds <- grid.Call(L_textBounds, as.graphicsAnnot(x$label), 
        x$x, x$y, resolveHJust(x$just, x$hjust), resolveVJust(x$just, 
            x$vjust), x$rot, 0)
    if (is.null(bounds)) 
        unit(0, "inches")
    else unit(bounds[3L], "inches")
}
<bytecode: 0x49eab10>
<environment: namespace:grid>

我倾向于说这只是一个普通的老bug,但是有人可以建议一个解决方法吗?

1 个答案:

答案 0 :(得分:0)

我仍然认为这算作网格中的一个错误,我打算将其打开以获得其他答案,但是对我来说足够的解决方法是使用grob的图形参数推送视口。

widthDetailsWithGP <- function (grob) {
    if (!is.null(grob$gp)) {
        pushViewport(viewport(gp=grob$gp))
        on.exit(popViewport())
    }
    return(widthDetails(grob))
}

如果存在,可能还需要推grob$vp;我不明白这是什么,在我关心的情况下似乎总是无效。