gpt4 book ai didi

r - 将 ggplots 保存到 for 循环中的列表

转载 作者:行者123 更新时间:2023-12-01 00:50:01 25 4
gpt4 key购买 nike

我产九ggplots在 for 循环中,随后使用 grid.arrange 排列这些图:

plot_list <- list()
for(i in c(3:ncol(bilanz.vol))) {
histogram <- ggplot(data = bilanz.vol, aes(x = bilanz.vol[,i])) +
geom_histogram() +
scale_x_log10() +
ggtitle(paste(varnames[i]))

# ggsave(filename = paste("Graphs/", vars[i], ".png", sep = ""), width = 16, height = 12, units = "cm")

plot_list <- c(plot_list, list(histogram))
}

library(gridExtra)

png(filename = "Graphs/non-mfi.png", width = 1280, height = 960, units = "px")
do.call(grid.arrange, c(plot_list, list(ncol = 3)))
dev.off()

代码本身运行良好,没有错误。但由于某种原因我不明白,网格显示相同的(最后一个)直方图九次。尽管如此,每个图都显示了正确的标题。

有趣的是,当我取消对 ggsave 的注释时在上面的代码行中,每个图都被正确(单独)保存并显示了预期的直方图。

有任何想法吗?

最佳答案

原因是ggplot不计算aes中的表达式在使用之前调用(所以我至少相信),它只是设置绘图并将数据存储在其中。在您的情况下,“数据”是整个数据框 bilanz.voli = ncol(bilanz.vol)for循环完成表达式 bilanz.vol[,i]将对所有绘图对象的评估结果相同。

为了让它工作,你可以这样做,确保所有的绘图对象都包含不同的数据集 my.data .

my.data <- data.frame(x = bilanz.vol[,i])
histogram <- ggplot(data = my.data, aes(x = x)) +
geom_histogram() +
scale_x_log10() +
ggtitle(paste(varnames[i]))

关于r - 将 ggplots 保存到 for 循环中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31824934/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com