gpt4 book ai didi

r - 在 `for` 循环中创建一组绘图

转载 作者:行者123 更新时间:2023-12-05 01:14:20 33 4
gpt4 key购买 nike

我有 15 个图需要显示,我在 for 列表中循环遍历它们,如下所示:

### Plotting that does not work
plots <- c()
for (i in colnames(dataframeselect)){
current_col <- dataframeselect[i]
plots <- c(plots, ggplot(dataframeselect, aes_string(colnames(current_col))) + geom_histogram())
}
ggarrange(plotlist = plots)

虽然我可以单独迭代和创建绘图,但我无法创建一个绘图列表,然后我可以将其传递给 ggarrange

我现在不得不求助于创建 15 个变量,这可以很好地完成工作,但有点乏味而且不适合 DRY:

### Plotting that works
my_plot <- function(column) ggplot(dataframeselect, aes_string(x = column)) + geom_histogram()

p1 <- my_plot("W3_f15771g")
p2 <- my_plot("W3_f15771a")
p3 <- my_plot("W3_f15771b")
#...
ggarrange(p1,p2,p3)

请注意,已经提出了一个问题,但这些答案都没有使用 for 循环来获得所需的结果:Lay out multiple ggplot graphs on a page

我收到的警告如下:

  Cannot convert object of class FacetNullFacetggprotogg into a grob.
44: In as_grob.default(plot) :
Cannot convert object of class environment into a grob.
45: In as_grob.default(plot) : Cannot convert object of class list into a grob.
46: In as_grob.default(plot) :
Cannot convert object of class tbl_dftbldata.frame into a grob.
47: In as_grob.default(plot) : Cannot convert object of class list into a grob.
48: In as_grob.default(plot) :
Cannot convert object of class ScalesListggprotogg into a grob.
49: In as_grob.default(plot) : Cannot convert object of class uneval into a grob.
50: In as_grob.default(plot) : Cannot convert object of class list into a grob.

有趣的是,每当我向列表中添加新绘图时,对象的计数不会增加 1,而是增加 9 个元素。因此,通过查看 plots 变量,我发现它不是一些 plot 对象而是我想添加的所有绘图的所有片段的一大堆:

messed-up-data-soup

所以我想知道如何以某种方式将绘图放入某个子容器中,然后 ggarrange 可以使用它。

最佳答案

一个选项是将plots初始化为一个list,其长度与数据集的列数相同

library(ggplot2)
plots <- vector('list', ncol(dataframeselect))
for (i in seq_along(dataframeselect)){
current_col <- colnames(dataframeselect)[i]
plots[[i]] <- ggplot(dataframeselect, aes_string(current_col)) +
geom_histogram()
}

关于r - 在 `for` 循环中创建一组绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58792821/

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