事实证明,在 gtable 中使用unit.pmax
默认的宽度/高度比较比我希望的要难;经过几个小时的挠头后,我将其范围缩小到这种情况:
library(grid)
w <- list(unit(1,"null"), unit(1,"null"))
class(w) <- c("unit.list", "unit")
h <- unit(1, "in")
gl1 <- grid.layout(1, 2, widths = w, heights = h,
respect = TRUE)
grid.newpage()
grid.show.layout(gl1) # fine
w2 <- w
w2[[1]] <- unit.pmax(unit(1,"null"), unit(1,"null"))
gl2 <- grid.layout(1, 2, widths = w2, heights = h,
respect = FALSE)
grid.newpage()
grid.show.layout(gl2)# fine
gl3 <- grid.layout(1, 2, widths = w2, heights = h,
respect = TRUE)
grid.newpage()
grid.show.layout(gl3)
## Error in grid.Call.graphics(L_setviewport, vp, TRUE) :
## non-finite location and/or size for viewport
所以 和 的结合unit.pmax(unit(1,"null"), unit(1,"null"))
使respect = TRUE
网格抱怨。如果您想知道,这种情况会出现在 ggplot2 中facet_grid
和theme(aspect.ratio = ...)
.
unit.pmax()
在尝试使用参数之前,我可以模糊地想象应该简化空单位respect
,但我真的不知道这一切意味着什么。但在实践中,它阻止了我改进 gtable 的 cbind/rbind。
任何解决方法?
编辑:我不知道如何提供一个最小的例子ggplot2
,除了安装我的叉子和运行
ggplot(data.frame(x=1:8, y=1:8, f=gl(2,4)), aes(x, y)) +
geom_point() +
facet_grid(f~.) +
theme(aspect.ratio=3)
# Error in grid.Call.graphics(L_setviewport, vp, TRUE) :
# non-finite location and/or size for viewport
所以unit.pmax()
在这种情况下会失败,而当前的比较方法compare.unit(,,pmax)
在其他情况下会失败,例如,
p1 = qplot(1, 1); p2 = qplot(1,1)
cbind(ggplotGrob(p1), ggplotGrob(p2), size="max")
# Error in mmm < each : comparison of these types is not implemented