web-dev-qa-db-ja.com

lsから複数のggplotをRの1つの個別のファイルに保存する

私のls上のオブジェクトとしていくつかのggplotがあります。それらを個別のファイルとして保存したい(ただし、1つの大きなファイルにすべてを保存する方法も知りたい)。私はこれを読みました: question および question ですが、コードを適応させることができません。また、提案されているように、それらすべてを1つの大きなファイルにプロットしようとしました here このエラーが発生します:Error in do.call("grid.arrange", plots2[[i]]) : second argument must be a list。 1つのリストにすべてのggplotを取得するのに欠けているものがあります。

これは私がこれまでに試したことです:

> ls() #List of objects on my ls. All the p* are my ggplots that I want to save.
[1] "all"     "dat"     "dat2"    "dat3"    "data"    "dlook"   "dlook2"  "dlook3"  "i"       "look2"   "mdfx"   
[12] "objects" "order"   "p"       "p1"      "p10"     "p11"     "p12"     "p13"     "p14"     "p15"     "p16"    
[23] "p17"     "p18"     "p19"     "p2"      "p3"      "p4"      "p5"      "p6"      "p7"      "p8"      "p9"    

> objects<-ls()
> plot<-objects[14:30]
> plots
 [1] "p1"  "p10" "p11" "p12" "p13" "p14" "p15" "p16" "p17" "p18" "p19" "p2"  "p3"  "p4"  "p5"  "p6"  "p7"  "p8"  "p9" 

> class(plots)
[1] "character"

plots2<-as.list(plots)#Transform into a list. 

library(gridExtra) #Code suggested to create one pdf file.
pdf("test.pdf", onefile = TRUE)
for (i in seq(length(plots2))) {
  do.call("grid.arrange", plots2[[i]])  
}
dev.off()
22
GodinA

プロットをリストにしておくのが最善です

l = mget(plots)

次に、それらをページごとに印刷します。

pdf("all.pdf")
invisible(lapply(l, print))
dev.off()

または、ファイルごとに1つのプロットを保存します。

invisible(mapply(ggsave, file=paste0("plot-", names(l), ".pdf"), plot=l))

またはそれらすべてを1ページに配置し、

ggsave("arrange.pdf", arrangeGrob(grobs = l))

またはそれらを複数のページに2x2で配置し、

ggsave("arrange2x2.pdf", marrangeGrob(grobs = l, nrow=2, ncol=2))

等.

(未試験)

53
baptiste

Lapplyで作業する必要がないことに注意してください。すべてのプロットを含むリストがあるとします。

MyPlots = list(plot1, plot2, plot3)

ただ使用する:

pdf("all.pdf")
MyPlots
dev.off()
6
Rtist

プロット_p1_、_p10_などが既に存在し、それらを_p1.pdf_などとして保存したい場合は、次のようにする必要があります。

_lapply(plots,function(x){ggsave(file=paste(x,"pdf",sep="."),get(x))})
_

ggsave(...)には、出力ファイルの次元と形式を指定するための多数の引数があります。

5
jlhoward

Joranのコメントを具体化する例、およびBaptisteの回答の補足として、これはリストを初期化し、事前にリストにプロットを保存する方法です。

plots <- list()
plots[[1]] <- ggplot(...) # code for p1
plots[[2]] <- ggplot(...) # code for p2

## Depending on if your plots are scriptable, you could use a loop

for (i in 3:10) {
    plots[[i]] <- ggplot(...) # code for plot i
}

次に、このリストplotsは、baptisteの回答のlに対応します。

リストを使用する場合、サブリストには単一のブラケット[が使用されます。リストの要素を取得するには、二重ブラケット[[を使用する必要があります。たとえば、plots[[1]]ggplotの最初の要素であるplotsオブジェクトを提供しますが、plots[1]は次のように最初のプロットを含む長さ1のリストを提供します要素。これは最初は混乱するように見えるかもしれませんが、特に最初の3つのプロットをプロットしたいだけの場合は、バプテストのどの例でもlの代わりにmyplots[1:3]を使用できます。 (詳細については、?"["を参照してください。)

x1x2x3などのように、変数に番号を付けて順番に名前を付けている場合は、リストを使用する必要があることを示しています。

4
Gregor Thomas