我制作了这个以 grob 图形(3 ggplots)结尾的长函数。但是,当我在循环中使用此函数并尝试将所有生成的 grobs 放入一个超级图形中时,我遇到了问题。我得到了一个有很多 grobs 的人物,但它总是同一个 grob(第一个)!
为了演示我的问题,我做了这个简化的例子:
library(ggplot2)
library(gridExtra)
data(iris)
#the function
multi.plot=function(data,heading){
p1=ggplot(data,aes(x=Sepal.Length,y=Sepal.Width))+geom_point()+ggtitle(heading)
p2=ggplot(data,aes(x=Petal.Length,y=Sepal.Width))+geom_point()
p3=ggplot(data,aes(x=Sepal.Length,y=Petal.Width))+geom_point()
grob1=arrangeGrob(p1,ncol=2)
grob2=arrangeGrob(p3,p2,ncol=2)
grob3=arrangeGrob(grob1,grob2)
# grob3 / return(grob3) / print(grob3) => all tried but non of them helps
}
# the loop
list.grob=list()
for(i in unique(iris$Species)){
select=iris[iris$Species==i,]
multi.plot(data=select,heading=i)
list.grob[[which(unique(iris$Species)==i)]]=grob3
}
# the final figure
png(file="superplot.png")
do.call("grid.arrange", list.grob)
dev.off()
那么如何使用函数和循环制作一个有很多 grobs 的图形呢?此外,我的标题(“标题”)没有按应有的方式出现。
感谢您的任何建议!