2017-06-15 13 views
0

qplotまたはggplotのエンティティ(オブジェクト、リスト、grobs)の名前付きリストをレンダリングまたは保存する方法はありますが、それらを配列のためのリストまたはベクトルとして渡す。私の問題はggplot2ではなく一般的にリストオブジェクトを抽出することだと思います。リスト内で保存またはプロットする方法

library(ggplot2) 
library(grid) 
library(gridExtra) 

# Generate a named list of ggplots 
plotlist <- list() 
for(a in c(1:4)) { 
    for(b in c(1:4)) { 
     plotlist[[paste0("Z",a,b)]] <- 
      qplot(rnorm(40,a,b), 
        geom="histogram", 
        xlab=paste0("Z",a,b)) 
    } 
} 

# Arrange and display them 
# The following two lines work fine, so the plots are in there: 
plotlist[["Z12"]] 
ggsave(plot=plotlist[["Z12"]], filename="deletable.png") 

# The following two lines complain about not being 'grobs' 
grid.arrange(plotlist, widths=c(1,1), ncol=2) 
grid.arrange(unlist(plotlist), widths=c(1,1), ncol=2) 

明示的に名前を付けずにgrobとしてキャストすることはできますか?

+0

あなたは([再現可能な例]を含めることができますhttps://stackoverflow.com/questions/5963269/how-to-make-a-great-r -reproducible-example)? – RobertMc

+0

@RobertMc私のオリジナルの投稿には、Jorisのガイドラインに従った再現可能なサンプルが含まれています。このサンプルは、library()ステートメントを除いてコンソールにコピーアンドペーストして動作します。私はそれらを追加します。 – mightypile

答えて

1

lapply(plotlist, ggplot2::ggplotGrob)を使用して、ggplot2 grobsのリストを生成します。このgrobsのリストは、gridExtra::grid.arrangeに渡すことができます。例えば

library(ggplot2) 
library(gridExtra) 

plotlist <- list() 

for(a in c(1:4)) { 
    for(b in c(1:4)) { 
     plotlist[[paste0("Z",a,b)]] <- 
      qplot(rnorm(40,a,b), 
        geom="histogram", 
        xlab=paste0("Z",a,b)) 
    } 
} 

grid.arrange(grobs = lapply(plotlist, ggplotGrob), widths = c(1, 1), ncol = 2) 

enter image description here

+0

この提案をテストしているうちに、 "plotlist"ではなく "grobs = plotlist"を明示的に使用するだけで、エラーがクリアされることがわかりました。 "grobs = lapply(plotlist、ggplotGrob)"はさらに明示的で、完全に機能します。ありがとう! – mightypile

関連する問題