如何使用 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)
}
我在 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)
}