从列表中调整 grobs 大小时,出现 "Value being assigned must be a unit" 错误
When resizing grobs from a list, getting "Value being assigned must be a unit" error
我正在尝试有效地调整 grobs 的大小以制作出版质量图。在我使用 Stack Overflow 答案中提供的代码以及该代码似乎涉及(我认为)处理列表形式的 grob 的上下文中,我反复 运行 遇到相同的错误。
这是一个自包含的示例,取自对先前堆栈溢出问题(底部的link)的一个很好的回答:
library(grid)
library(gridExtra)
library(ggplot2)
morletPlots <- replicate(5, ggplot(), simplify = FALSE)
rawplot <- replicate(5, ggplot(), simplify = FALSE)
glets <- lapply(morletPlots, ggplotGrob)
graws <- lapply(rawplot, ggplotGrob)
rawlet <- function(raw, let, heights=c(4,1)){
g <- rbind(let, raw)
panels <- g$layout[grepl("panel", g$layout$name), ]
# g$heights <- grid:::unit.list(g$heights) # not needed
g$heights[unique(panels$t)] <- lapply(heights, unit, "null")
g
}
combined <- mapply(rawlet, raw = graws, let=glets, SIMPLIFY = FALSE)
grid.newpage()
grid.arrange(grobs=combined, ncol=2)
当我尝试 运行 时,我得到:
Error in [<-.unit
(*tmp*
, unique(panels$t), value = list(4, 1)) :
Value being assigned must be a unit
我在尝试使这个(和类似的代码)工作时做错了什么?
示例取自 baptiste 对
的回答
某些代码可能已及时更改。对象的 类 在此过程中被弄乱了。这有效:
library(grid)
library(gridExtra)
library(ggplot2)
morletPlots <- replicate(5, ggplot(), simplify = FALSE)
rawplot <- replicate(5, ggplot(), simplify = FALSE)
glets <- lapply(morletPlots, gta)
graws <- lapply(rawplot, ggplotGrob)
rawlet <- function(raw, let, heights=c(4,1)){
g <- gtable_rbind(let, raw)
panels <- g$layout[grepl("panel", g$layout$name), ]
g$heights[unique(panels$t)] <- unit(heights, units = "null")
g
}
combined <- mapply(rawlet, raw=graws, let=glets, SIMPLIFY = F)
grid.newpage()
grid.arrange(grobs=combined)
某些代码可能已及时更改。 类 个对象在处理过程中被弄乱了。
我正在尝试有效地调整 grobs 的大小以制作出版质量图。在我使用 Stack Overflow 答案中提供的代码以及该代码似乎涉及(我认为)处理列表形式的 grob 的上下文中,我反复 运行 遇到相同的错误。
这是一个自包含的示例,取自对先前堆栈溢出问题(底部的link)的一个很好的回答:
library(grid)
library(gridExtra)
library(ggplot2)
morletPlots <- replicate(5, ggplot(), simplify = FALSE)
rawplot <- replicate(5, ggplot(), simplify = FALSE)
glets <- lapply(morletPlots, ggplotGrob)
graws <- lapply(rawplot, ggplotGrob)
rawlet <- function(raw, let, heights=c(4,1)){
g <- rbind(let, raw)
panels <- g$layout[grepl("panel", g$layout$name), ]
# g$heights <- grid:::unit.list(g$heights) # not needed
g$heights[unique(panels$t)] <- lapply(heights, unit, "null")
g
}
combined <- mapply(rawlet, raw = graws, let=glets, SIMPLIFY = FALSE)
grid.newpage()
grid.arrange(grobs=combined, ncol=2)
当我尝试 运行 时,我得到:
Error in
[<-.unit
(*tmp*
, unique(panels$t), value = list(4, 1)) : Value being assigned must be a unit
我在尝试使这个(和类似的代码)工作时做错了什么?
示例取自 baptiste 对
某些代码可能已及时更改。对象的 类 在此过程中被弄乱了。这有效:
library(grid)
library(gridExtra)
library(ggplot2)
morletPlots <- replicate(5, ggplot(), simplify = FALSE)
rawplot <- replicate(5, ggplot(), simplify = FALSE)
glets <- lapply(morletPlots, gta)
graws <- lapply(rawplot, ggplotGrob)
rawlet <- function(raw, let, heights=c(4,1)){
g <- gtable_rbind(let, raw)
panels <- g$layout[grepl("panel", g$layout$name), ]
g$heights[unique(panels$t)] <- unit(heights, units = "null")
g
}
combined <- mapply(rawlet, raw=graws, let=glets, SIMPLIFY = F)
grid.newpage()
grid.arrange(grobs=combined)
某些代码可能已及时更改。 类 个对象在处理过程中被弄乱了。