R:并排显示一个函数中生成的可变数量的GGPlot

R:并排显示一个函数中生成的可变数量的GGPlot,r,ggplot2,R,Ggplot2,我有一个函数DisplayPlot,它将引用数据帧中的列的字符串列表作为输入。 例如,如果list_string=cstring1,string2,在list_string的元素上循环,我想并排显示这两个ggplot 到目前为止,我在函数中所做的是将GGPlot存储到列表中: for (i in 1:length(list_string){ p = ggplot(data=d, aes(x=d[,1], y=as.numeric(levels(d[,(i+1)]))[d[,(i+1)]], fi

我有一个函数DisplayPlot,它将引用数据帧中的列的字符串列表作为输入。 例如,如果list_string=cstring1,string2,在list_string的元素上循环,我想并排显示这两个ggplot

到目前为止,我在函数中所做的是将GGPlot存储到列表中:

for (i in 1:length(list_string){
p = ggplot(data=d, aes(x=d[,1], y=as.numeric(levels(d[,(i+1)]))[d[,(i+1)]], fill=d[,1])) +
  geom_bar(stat="identity") +
    guides(fill=FALSE) +
      labs(x = Y) + labs(y = paste("CP",list_X[i],"_per_",Y,sep = "")) 
graph[[length(graph) + 1]] <- p }
问题是,如果我想使用grid.arrange这样的函数,我需要手动写入绘图的名称:grid.arrangep1,p2,ncol=2,而在我的情况下,这个数字可能会有所不同,并存储到grid.arrange不喜欢的列表格式中

非常感谢您的帮助,
克莱门特我找到了问题的答案

multiplot(plotlist=graph,col=length(list_string))
从Rmisc包

grid.arrange(grobs = graph)
或者从历史上看,并不总是有一场粗俗的争论

do.call(grid.arrange, graph)

作为旁注,你不应该使用[或者$inside aes为什么我永远不应该在aes中使用它们?这里有一个可能出错的例子:嗨,谢谢你的例子。事实上,我这样做是因为我没有找到其他方法:在你的例子中,x是已知的,x是一个包含值的向量。在我的例子中,因为我寻求最大的可伸缩性…也因为我不是专业人士R programmer!,我列的名称不包含值。因此,要访问该名称,我正在使用[。如果您看到任何解决方案,我将非常乐意使用它。有几种方法可以实现这一点,而无需求助于[;请发布一个新问题,并附上一个包含模拟数据的独立的最小示例。谢谢,这很好。multiplot函数也是一个很好的解决方案。您应该说multiplot函数是从哪里获得的。它似乎在一堆不同的包中,大部分来自
do.call(grid.arrange, graph)