如何使用 for 循环绘制多个图?

How to make multiple plots with a for loop?

我在 r 中试验 waffle 包,并尝试使用 for 循环一次制作多个图,但无法让我的代码工作。我有一个包含每年可再生能源价值的数据集,因为它有超过 40 年的数据,我一直在寻找一种简单的方法来用 for 循环绘制这些数据,而不是逐年绘制。我究竟做错了什么? 我从 1:16 那里得到它作为一个实验,看看它是否会起作用,尽管实际上我会在我的数据集中一直这样做。

for(i in 1:16){
renperc<-islren$Value[i]
parts <- c(`Renewable`=(renperc), `Non-Renewable`=100-renperc)
waffle(parts, rows=10, size=1, colors=c("#00CC00", "#A9A9A9"), 
       title="Iceland Primary Energy Supply", 
       xlab=islren$TIME)
}

如果我答对了你的问题,你想在同一个面板中绘制所有 16 次迭代?您可以使用 par(mfrow = c(4,4)) 将绘图 window 参数化为 16 个较小的绘图(创建一个 4 x 4 矩阵并递归地绘制到每个单元格中)。

## Setting the graphical parameters
par(mfrow = c(4,4))

## Running the loop normally
for(i in 1:16){
    renperc<-islren$Value[i]
    parts <- c(`Renewable`=(renperc), `Non-Renewable`=100-renperc)
    waffle(parts, rows=10, size=1, colors=c("#00CC00", "#A9A9A9"), 
           title="Iceland Primary Energy Supply", 
           xlab=islren$TIME)
}

如果您需要更多图(例如 40),您可以增加图形参数中的数字(例如 par(mfrow = c(6,7))),但这会创建非常小的图。一种解决方案是在多个循环中执行此操作(for(i in 1:16)for(i in 17:32);等)

更新:当我尝试输入任何高于一个值(例如1:16)或一个字母时,代码根本没有绘制任何东西,无论是单独的图还是一个图中的多个图window(我认为华夫饼可能不像常规图那样支持)。最后,我通过将它变成一个函数来进行管理,尽管我仍然不确定为什么我的原始方法在这样做时不起作用。请参阅下面的代码。我也稍微调整了一下,例如添加了 ggsave。

    #function
    waffling <- function(x){
    renperc<-islren$Value[x]
    parts <- c(`Renewable`=(renperc), `Non-Renewable`=100-renperc)
    waffle(parts, rows=10, size=1, colors=c("#00CC00", "#A9A9A9"), title="", 
    xlab=islren$TIME[x])
    ggsave(file=paste0("plot_", x,".png"))}

    for(i in 1:57){
    waffling(i)
    }