首页 > 解决方案 > 为什么我列表中的所有 ggplots 看起来都一样?

问题描述

我正在尝试用 ggplot2 批量生产地块。也就是说,因为我不想通过一些小的编辑来复制和粘贴相同的代码行 35 次。

为了实现这一点,我设置了一个 for 循环,它创建了 35 个不同的图(通过在每个循环循环中使用来自不同变量的数据)。然后将生成的图存储在一个长度已经为 35 的列表中。现在,当我查看所述列表的不同元素时,它显示了我迄今为止尝试过的列表的所有元素中完全相同的图。我肯定知道,例如,在现场没有。列表中的第 1 个,应该有与当前不同的情节。

我已经创建了一些单独的图,例如:

p1 <- ggplot(predval, aes(x = theta, y = predval[,2])) +
    geom_line() +
    coord_cartesian(ylim = c(0,1)) +
    theme(axis.title.x = element_blank(),
          axis.title.y = element_blank(),
          legend.position = "none") +
    scale_y_continuous(labels = scales::percent)

(注意:我使用数据集“predval”的第 2 列来绘制 y 轴,因为第 1 列包含用于 x 轴的“theta”变量。这就是为什么我使用第 2 列来绘制第 1 号图。 )

这工作就好了。为了避免这样做 35 次,我尝试创建一个循环(见下文)。但是,当我运行循环时,列表​​中充满了相同图的 35 个副本。为什么会这样,我该如何解决?

plotlist[[1]] <- NA           # to create the plotlist
for (i in 1:35){
  plotlist[[i]] <- NA           # give it length 35
}

for (i in 1:35){              # 35 cycles for 35 plots
  plotlist[[i]] <- ggplot(predval, aes(x = theta, y = predval[,i+1])) +
                     geom_line() +
                     coord_cartesian(ylim = c(0,1)) +
                     theme(axis.title.x = element_blank(),
                           axis.title.y = element_blank(),
                           legend.position = "none") +
                     scale_y_continuous(labels = scales::percent)
}

我希望收到一个完整的列表,其中包含可用于 ggarrange 的“plotlist”参数的不同 ggplots。

## 编辑

qdread 的建议对我来说非常有效!非常感谢!:D

标签: rlistfor-loopggplot2plot

解决方案


推荐阅读