0

我正在尝试使用 heightDetails() 找出 ggplot 图例的高度,但出现错误

UseMethod(“absolute.units”)中的错误:没有适用于“absolute.units”的适用方法应用于“unit”类的对象

示例:对于提取,我使用了此处建议的函数 g_legend :

g_legend<-function(a.gplot){
  tmp <- ggplot_gtable(ggplot_build(a.gplot))
  leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
  legend <- tmp$grobs[[leg]]
  return(legend)
}

所以假设我们有一个简单的条形图

testplot <- ggplot(mtcars, aes(x=as.factor(gear), fill=as.factor(gear))) + geom_bar()

, 我用

testlegend <- g_legend(testplot)

得到传说。is.grob(testlegend) 表明它确实是一个 grob,而 grid.draw(testlegend) 工作得很好。但是 heightDetails(testlegend) 给了我上面提到的异常。

我的猜测是 testlegend$heights 包含一个单位的总和,而 heightDetails 无法处理它。这是原因吗?如果没有,为什么它不起作用?检索图例高度的另一种方法是什么?

4

1 回答 1

1

我相信您使用的是旧版本的 grid/R/gtable;更新应该修复错误。话虽如此,没有人知道为什么 absolute.units 在这里使用,并且根据我的经验,它给出了不准确的答案。您可能会发现对 gtable 高度求和比调用其 heightDetails 方法更可靠。

于 2016-04-08T21:56:21.510 回答