0

我正在尝试使用 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)
}

4

2 回答 2

1

如果我正确地回答了您的问题,您想在同一个面板中绘制所有 16 次迭代吗?您可以使用参数化您的绘图窗口以将其划分为 16 个较小的绘图par(mfrow = c(4,4))(创建一个 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); 等)

于 2018-02-27T00:21:02.343 回答
0

更新:当我尝试输入任何高于一个值(例如 1:16)或字母时,代码根本没有绘制任何东西,无论是单独的图还是在一个绘图窗口中的多个(我认为华夫饼可能不会以与常规地块相同的方式支持)。最后,我把它变成了一个函数,虽然我仍然不确定为什么我的原始方法不起作用。请参阅下面的代码。我还对其进行了一些调整,例如添加了 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)
    }
于 2018-02-27T23:15:30.557 回答