提示:我不确定如何为这个问题创建一个可重现的示例。
我正在尝试使用gridExtra
包绘制一系列的grobs。
我有一些类似于以下代码:
## Make Graphic Objects for Spec and raw traces
for (i in 1:length(morletPlots)){
gridplots_Spec[[i]]=ggplotGrob(morletPlots[[i]])
gridplots_Raw[[i]]=ggplotGrob(rawPlot[[i]])
gridplots_Raw[[i]]$widths=gridplots_Spec[[i]]$widths
}
names(gridplots_Spec)=names(morletPlots)
names(gridplots_Raw)=names(rawPlot)
## Combine spec and Raw traces
g=list()
for (i in 1:length(rawPlot)){
g[[i]]=arrangeGrob(gridplots_Spec[i],gridplots_Raw[i],heights=c(4/5,1/5))
}
numPlots = as.numeric(length(g))
##Plot both
for (i in 1:numPlots){
grid.draw(g[i],ncol=2)
}
让我来解释一下这段代码。
`morletPlots` 是一个 ggplot 的列表。
`rawplot` 是另一个 ggplot 的列表。
`gridplots_spec` 和 `gridplots_Raw` 是从上面的 ggplot 中制作的 grobs 的列表。
`g` 是将上述两个 grobs 组合在一起的列表,因此对于列表的长度,要组合 `gridplots_spec[1]` 和 `gridplots_raw[1]` 以及其他相应索引的元素。
现在,我的目标是将它们全部绘制成两列。但是,每当我通过 `grid.draw` 循环传递 `gridplots_spec[i]` 时,都会出现错误:
"Error in UseMethod("grid.draw") :no applicable method for 'grid.draw' applied to an object of class "list"
我不能解压它,因为它只会变成一个很长的字符向量。有什么想法吗?
如果非常关键,我可以花时间制作一个可复现的示例,但我更可能是漏掉了一些简单的步骤。
[[
和[
之间的区别。尝试使用grid.draw(g[[i]])
。 - RolandError in gList(list(list(grobs = list(list(x = 0.5, y = 0.5, width = 1, : only 'grobs' allowed in "gList"
。 - Ted Mosbyfor
循环中,你犯了同样的错误。 - Roland