gpt4 book ai didi

r - 如何确定 pointsGrob 的大小(相对于 textGrob 的大小)?

转载 作者:行者123 更新时间:2023-12-04 04:43:33 25 4
gpt4 key购买 nike

为什么确定点 grob (pointsGrob) 的大小(例如,以 mm 为单位)失败,但确定文本 grob (textGrob) 则不会?

### puzzled about grobs (not) knowning how big they are:
require(grid)
convertUnit(grobWidth(textGrob("some tex")), "mm") # 16.93mm => fine
convertUnit(grobWidth(pointsGrob(0.5, 0.5)), "mm") # 0mm => ?
convertUnit(grobWidth(pointsGrob(0.5, 0.5, size=unit(3, "mm"))), "mm") ## still 0mm...

我问的原因是:如果你并排放置一个文本 grob 和一个点 grob,并更改 cex 的值,那么两个 grob 突然重叠(不需要的行为).

这是一个显示类似问题的示例:

gt <- grobTree(pointsGrob(x=.5, y=.5,  gp=gpar(cex=4)),
linesGrob(x=0:1, y=.5, gp=gpar(cex=4)),
pointsGrob(x=.5, y=.5, gp=gpar(cex=1)))
pg <- packGrob(frameGrob(vp=NULL), gt,
width = unit(1, "char"),
height = unit(1, "char"))
grid.newpage()
grid.draw(pg)
grid.rect(width=grobWidth(pg), height=grobHeight(pg), gp=gpar(col="red"))

矩形显示 grob 宽度和高度不正确; pg 不会“看到”具有大 cex 的点的大小。如何实现?

最佳答案

我不知道如何解决零点尺寸的问题,估计是在C层的grid源码内部定义了。

但是,我想指出,无论 pointsGrob 问题如何,grobWidth 和 grobHeight 都没有为您的 packGrob/gTree 定义,即使 pointsGrob 被 textGrob 替换,该方法也会失败。你可能想定义一个新类的 gTree,比如“mygrob”,并定义你自己的 widthDetails.mygrob 和 heightDetails.mygrob 方法,

library(grid)

gt <- grobTree(linesGrob(x=c(0.2, 0.8), y=.5, gp=gpar(col="grey", lwd=10)),
textGrob("some label", gp=gpar(cex=2)),
cl = "mygrob")

widthDetails.mygrob <- function(x)
do.call(max, lapply(x$children, grobWidth))


heightDetails.mygrob <- function(x)
do.call(max, lapply(x$children, grobHeight))

grid.newpage()
grid.draw(gt)
grid.rect(width=grobWidth(gt), height=grobHeight(gt), gp=gpar(col="red"))

关于r - 如何确定 pointsGrob 的大小(相对于 textGrob 的大小)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18552357/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com