绘制一个 grobs 列表
plotting a list of grobs
披露:我不确定如何为这个问题制作一个可重现的例子。
我正在尝试使用 gridExtra
包绘制一个 grob 列表。
我有一些代码如下所示:
## 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
= 上面两个 grob 的列表组合在一起,因此组合 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"
我无法取消列出它,因为它只是变成了一个长字符向量。有什么想法吗?
如果它绝对重要,我可以花时间制作一个可重现的示例,但我更有可能只是错过了一个简单的步骤。
这是我对你的脚本的解释,如果它不是预期的结果,你可能需要使用一些点点滴滴来使你的问题可重现。
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)
编辑 我无法抗拒这种为插图着色的恶作剧;请随意忽略它。
palette(RColorBrewer::brewer.pal(8, "Pastel1"))
ggplot.numeric = function(i) ggplot2::ggplot() +
theme(panel.background=element_rect(fill=i))
morletPlots <- lapply(1:5, ggplot)
rawplot <- lapply(1:5, ggplot)
披露:我不确定如何为这个问题制作一个可重现的例子。
我正在尝试使用 gridExtra
包绘制一个 grob 列表。
我有一些代码如下所示:
## 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
= 上面两个 grob 的列表组合在一起,因此组合 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"
我无法取消列出它,因为它只是变成了一个长字符向量。有什么想法吗?
如果它绝对重要,我可以花时间制作一个可重现的示例,但我更有可能只是错过了一个简单的步骤。
这是我对你的脚本的解释,如果它不是预期的结果,你可能需要使用一些点点滴滴来使你的问题可重现。
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)
编辑 我无法抗拒这种为插图着色的恶作剧;请随意忽略它。
palette(RColorBrewer::brewer.pal(8, "Pastel1"))
ggplot.numeric = function(i) ggplot2::ggplot() +
theme(panel.background=element_rect(fill=i))
morletPlots <- lapply(1:5, ggplot)
rawplot <- lapply(1:5, ggplot)