r - 在R中使用分配函数时,如何将图形对象存储到列表中?

标签 r grob

我创建了以下函数,它接受一个数据框并输出多个图:

boxplot_depend_vs_independ <- function(df_train) {
  
  train_int_names <- df_train %>% select_if(is.numeric)
  
  int_names <- names(train_int_names)
  
   for (i in int_names) {       
     
    assign(paste0("var_",i), 
           ggplot(train, aes_string(x = train$target, y = i)) + 
            geom_boxplot(color = 'steelblue', outlier.color = 'firebrick', 
                         outlier.alpha = 0.35) +
            labs(title = paste0(i,' vs target'), y = i, x= 'target') +
            theme_minimal() + 
            theme(
              plot.title = element_text(hjust = 0.45),
              panel.grid.major.y =  element_line(color = "grey", 
                                                 linetype = "dashed"),
              panel.grid.major.x = element_blank(),
              panel.grid.minor.y = element_blank(),
              panel.grid.minor.x = element_blank(),
              axis.ticks.x = element_line(color = "grey")
            )
           )
   }
  

  myGlist <- list(var_YOJ) # Example of one grob in a list

  gridExtra::grid.arrange(grobs = myGlist, nrow=4)
}

如何在创建图形对象时将其放入列表中,以便最终将它们传递给 grid.arrange 函数?分配函数将它们放入变量中,但如何让循环将其放入列表中?

最佳答案

而不是使用 assign 在全局环境中创建对象,初始化list 'myGlist' 在顶部,然后将每次迭代的输出分配给它

boxplot_depend_vs_independ <- function(df_train) {

  train_int_names <- df_train %>% 
            select_if(is.numeric)

  int_names <- names(train_int_names)
   myGlist <- vector('list', length(int_names))
   names(myGlist) <- int_names
  for (i in int_names) {       
 
   myGlist[[i]] <- 
       ggplot(train, aes_string(x = train$target, y = i)) + 
        geom_boxplot(color = 'steelblue', outlier.color = 'firebrick', 
                     outlier.alpha = 0.35) +
        labs(title = paste0(i,' vs target'), y = i, x= 'target') +
        theme_minimal() + 
        theme(
          plot.title = element_text(hjust = 0.45),
          panel.grid.major.y =  element_line(color = "grey", 
                                             linetype = "dashed"),
          panel.grid.major.x = element_blank(),
          panel.grid.minor.y = element_blank(),
          panel.grid.minor.x = element_blank(),
          axis.ticks.x = element_line(color = "grey")
        )
       
      }




    gridExtra::grid.arrange(grobs = myGlist, nrow=4)
   }

关于r - 在R中使用分配函数时,如何将图形对象存储到列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67029782/

相关文章:

R ggplot : Remove all space around plot

regex - 如何从数据框中的列名中删除 ".x"?

r - 为什么列名会连接到线性模型摘要的行输出中?

r - 估计ggplot2中图例占用的绘图百分比

r - 将grid.text添加到arrange.grob以导出为PNG

r - 如何更改 ggplot 中的一个特定方面

r - ggplot2调色板图例不显示

r - 如何使用 annotation_custom() 在绘图区域的精确区域放置 grobs?

r - 强制将常规绘图对象放入 Grob 以在 grid.arrange 中使用

r - 使用 grid.arrange 底部的通用 x 轴标签和图例