首页 > 解决方案 > 我试图在 ggplot 中循环将结果保存到列表中

问题描述

我正在尝试循环 ggplot 以将它们保存到列表中。我遇到了一个问题,因为所有图表都带有最后一个变量的数据。你能帮我吗?我想将图形存储在列表中

这是我的数据的样子:

head(rev_regions1m)
         World           US      Eurozone Emerging.Markets Asia.Pacific.Ex.Japon       date
1 -0.015025440 -0.004314109 -0.0074216799     -0.016600603          -0.020172773 2018-12-31
2 -0.015025440 -0.004314109 -0.0074216799     -0.016600603          -0.020172773 2019-01-01
3 -0.015025440 -0.004314109 -0.0074216799     -0.016600603          -0.020172773 2019-01-02
4  0.016668433  0.001509360 -0.0007849854     -0.003445408          -0.007896815 2019-01-03
5  0.016668433  0.001509360 -0.0007849854     -0.003445408          -0.007896815 2019-01-04
6 -0.009066019 -0.005461343 -0.0051865009     -0.013999017          -0.016930263 2019-01-07
> 

这是我的代码:

plot<-list()
for (i in 1:(length(rev_regions1m)-1)) {
  plot[[i]]<-ggplot(rev_regions1m)+
    geom_line((aes(x=date, y= rev_regions1m[,i])),size=1.4, color="midnightblue", inherit.aes = FALSE)+
    labs(x="Date", y="Value", title = "Revisions 1M", subtitle = names_regions[i])+
    theme_wsj()+ 
    scale_colour_wsj("colors6")
}

任何人都可以帮助我,拜托!

标签: rggplot2

解决方案


这是生成 ggplot 对象列表的一种解决方案。工作流程如下:

  1. 拆分数据以获得足以制作绘图的数据框列表

  2. 创建您的自定义绘图功能

  3. 用于lapply()循环数据框列表并创建 ggplot 对象列表。

library(ggplot2)
# using base R dataset iris
# Lets say you want to make a plot for each specie and save it into a list
# split your initial data into pieces that will be used to make plots
iris_list = split(iris, iris$Species) 
# create a custom function that take as input a piece of your data
plot_fun = function(irisdf) {
  ggplot(irisdf, aes(x = Sepal.Length, y = Sepal.Width)) +
    geom_point()
}
# use lapply() on the list of pieces to get a list of ggplot objects
plots_list = lapply(iris_list, FUN = plot_fun)

推荐阅读