Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建grid.arrange将接受并在r中绘制的ggplot对象列表_R_List_Ggplot2_Gridextra_Grob - Fatal编程技术网

如何创建grid.arrange将接受并在r中绘制的ggplot对象列表

如何创建grid.arrange将接受并在r中绘制的ggplot对象列表,r,list,ggplot2,gridextra,grob,R,List,Ggplot2,Gridextra,Grob,更新内核重启后,下面的代码立即运行。我留下这个问题,因为我没有看到将plot对象转换为列表并追加的确切方法 我想动态创建ggplot2::ggplot对象(gg)的列表,并将该列表传递给gridExtra::grid.arrange()以绘制它们 然而,当我尝试时,我会遇到错误(请参阅下面代码的底部) 如何创建GGPlot列表并在grid.arrange()中使用它(或在需要一个或多个gg对象或GROB的任何位置) 我已经看过了,但是解决方案不起作用 下面是一个简单的输出示例: # RStudi

更新内核重启后,下面的代码立即运行。我留下这个问题,因为我没有看到将plot对象转换为列表并追加的确切方法

我想动态创建ggplot2::ggplot对象(gg)的列表,并将该列表传递给gridExtra::grid.arrange()以绘制它们

然而,当我尝试时,我会遇到错误(请参阅下面代码的底部)

如何创建GGPlot列表并在grid.arrange()中使用它(或在需要一个或多个gg对象或GROB的任何位置)

我已经看过了,但是解决方案不起作用

下面是一个简单的输出示例:

# RStudio Version 1.3.1093
# R version 4.0.3 (2020-10-10)
# ggplot2 version 3.3.2
# gridExtra version 2.3

library(ggplot2)
library(gridExtra)

test_fun = function (x) {
  plt_lst = list()
  
  for(col in colnames(x)){
    plt = ggplot(data = x, aes(x = x[ , col])) +
      geom_histogram()
    plt_lst = append(plt_lst, list(plt))
    grid.arrange(plt) # Draws each graph.
    print(is(plt))
    # [1] "gg"
    print(is(plt[[1]]))
    # [1] "data.frame" "list"       "oldClass"   "vector"
  }
  
  return(plt_lst)
}

df = data.frame(a = rnorm(n = 50),
                b = rnorm(n = 50))

test_plt_lst = test_fun(df)
print(is(test_plt_lst))
# [1] "gg"
print(is(test_plt_lst[[1]]))
# [1] "data.frame" "list"       "oldClass"   "vector"

# grid.arrange(test_plt_lst)
# # Error in gList(list(data = list(a = c(1.14459276559037, 2.33485713757935, : only 'grobs' allowed in "gList"


# Works
do.call(grid.arrange, test_plt_lst)
# The following error no longer appearing.
# Error in `$<-.data.frame`(`*tmp*`, "wrapvp", value = list(x = 0.5, y = 0.5, : replacement has 17 rows, data has 50
#RStudio版本1.3.1093
#R版本4.0.3(2020-10-10)
#ggplot2版本3.3.2
#gridExtra版本2.3
图书馆(GG2)
图书馆(gridExtra)
测试乐趣=功能(x){
plt_lst=list()
用于(col-in-colnames(x)){
plt=ggplot(数据=x,aes(x=x[,col]))+
geom_直方图()
plt_lst=append(plt_lst,list(plt))
网格排列(plt)#绘制每个图形。
打印(is(plt))
#[1]“gg”
打印(is(plt[[1]]))
#[1]“data.frame”列表“oldClass”向量
}
返回(plt_lst)
}
df=数据帧(a=rnorm(n=50),
b=rnorm(n=50))
测试plt lst=测试乐趣(df)
打印(is(测试打印)
#[1]“gg”
打印(is(测试plt lst[[1]]))
#[1]“data.frame”列表“oldClass”向量
#网格排列(测试plt lst)
##gList(list)中的错误(data=list)(a=c)(1.14459276559037,2.334857713757935,:“gList”中只允许“grob”
#工作
do.call(grid.arrange,test_plt_lst)
#以下错误不再出现。
#“$中出现错误您可以尝试:

  • 初始化列表的长度,因为循环中对象的增长速度相当慢
  • 使用
    .data
    代词对名称进行子集,以便在x轴上获得专有名称
  • 库(ggplot2)
    图书馆(gridExtra)
    测试乐趣=功能(x){
    plt_lst=向量('列表',长度(x))
    
    nm使用
    plt\u lst=append(plt\u lst,list(plt))
    ,或者更好地放弃for/append循环,使用
    lappy
    ,因为您仍然会遇到
    aes()的问题
    这种情况下的延迟评估。@MrFlick,哈哈,谢谢。我一发布就注意到了。问题仍然存在,尽管对象类型至少完好无损。那么,您可能会收到不同的错误消息。您应该更新它。因为
    do.call(grid.arrange,test_plt_lst)
    在更改后对我来说很好。(尽管由于我提到的另一件事,它只打印了两次相同的情节)是的,重启内核后它现在可以工作了。谢谢!您需要向
    FUN=
    提供一个函数,现在您正在调用一个函数并传递它的值。该值作为第一个参数传递给该函数。它应该看起来像
    plts=lappy(X=level\u vect,FUN=function(level\u str){basic\u scatter(data=data[,level_str],x=x,y=y,…)
    谢谢,@Ronak Shah!应该注意的是,当将追加的
    gg
    对象作为列表的唯一对象传递时(根据适当的
    append
    使用),使用
    append确实有效。
    
    library(ggplot2)
    library(gridExtra)
    
    test_fun = function (x) {
      plt_lst = vector('list', length(x))
      nm <- names(x)
    
      for(i in seq_along(x)){
        plt_lst[[i]] = ggplot(data = x, aes(x = .data[[nm[i]]])) + geom_histogram()
      }
      
      return(plt_lst)
    }
    
    
    test_plt_lst = test_fun(df)
    do.call(grid.arrange, test_plt_lst)