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,但是有人可以建议一个解决方法吗?
答案 0 :(得分:0)
我仍然认为这算作网格中的一个错误,我打算将其打开以获得其他答案,但是对我来说足够的解决方法是使用grob的图形参数推送视口。
widthDetailsWithGP <- function (grob) {
if (!is.null(grob$gp)) {
pushViewport(viewport(gp=grob$gp))
on.exit(popViewport())
}
return(widthDetails(grob))
}
如果存在,可能还需要推grob$vp
;我不明白这是什么,在我关心的情况下似乎总是无效。