带有 marrangeGrob 的 ggplot 列表,错误地绘制相同的

list of ggplot with marrangeGrob, wrongly plot the same

我正在与 marrangeGrob 作斗争。我需要在多个页面上绘制许多(许多)直方图。我的代码逻辑可以用鸢尾花数据集来写。

library(ggplot)
library(gridExtra)

num_columns=5
num_rows=5
num_pages=3

val=num_columns*num_rows*num_pages
vplots=list()

for(i in 1:val){
    aname=sample(colnames(iris)[1:4],1) # randomly pick a column name
    vals=sample(iris[,aname], 50, replace=TRUE) # with that column, pick 50 random values
    a_hist=ggplot(mapping=aes(vals)) + geom_histogram() + xlab(aname)  #plotting the histogram
    vplots[[i]]=a_hist # store the plot in the list
    fn=paste0("single_plot_",i,".png")
    ggsave(a_hist, filename =fn)
}


ggsave("arrange5x5.pdf", marrangeGrob(grobs=vplots, nrow=5, ncol=5), width = 15, height=15)

我遇到的问题如下。每个直方图都略有不同,从 "single_plot_N.png" 可以看出。当我尝试通过使用 marrageGrob 将所有这些图放在同一个文件中时,所有直方图都是相同的。我做错了什么?

直方图 1: 直方图 2: 一个文件上的多个图,所有直方图都相同(为什么?):

您需要在 ggplot 中定义 data 对象,即用于绘图的数据集:

set.seed(1)
num_columns=2
num_rows=2
num_pages=1
val=num_columns*num_rows*num_pages
vplots=list()

for(i in 1:val) {
    aname=sample(colnames(iris)[1:4],1) # randomly pick a column name
    vals=sample(iris[,aname], 50, replace=TRUE) # with that column, pick 50 random values
    # Generate a data frame for ggplot
    df <- data.frame(vals=vals)
    # Input the dataset to use for plot
    a_hist=ggplot(mapping=aes(vals), data=df) + geom_histogram() + xlab(aname)  #plotting the histogram
    vplots[[i]]=a_hist 
}

grid.arrange(grobs=vplots, ncol=2)