【发布时间】:2016-03-11 14:33:40
【问题描述】:
披露:我不确定如何为这个问题制作一个可重现的例子。
我正在尝试使用 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 = ggplots 列表
rawplot = ggplots 列表
gridplots_spec 和 gridplots_Raw = 来自上述 ggplots 的 grobs 列表。
g = 上面两个 grobs 组合的列表,因此组合 gridplots_spec[1] 和 gridplots_raw[1] 以此类推,以获取列表的长度。
现在我的目标是将所有这些绘制成 2 列。但是每当我通过 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]]) -
我做到了,
Error in gList(list(list(grobs = list(list(x = 0.5, y = 0.5, width = 1, : only 'grobs' allowed in "gList" -
好吧,你在前面的
for循环中犯了同样的错误。 -
错误告诉你出了什么问题。罗兰又是对的。当您应该使用两个时,您正在使用一个支架。您在上一个问题stackoverflow.com/questions/35869978/… 中做了同样的事情。不要使用单括号来访问列表的元素。
-
不仅仅是缺少一个简单的步骤,您的代码似乎对您使用的某些功能存在许多误解,因此花时间制作一个最小的可重现示例确实是值得的。从长远来看,它可能更省时,因为您会更好地了解每个功能在做什么。