2017-10-30 29 views
1

ggplotsのリストからggplotsのグリッドの複数ページpdfを生成しようとしています。私はこれを行うために非常に多くの方法を試して成功していません。ここで私が働いてきたものに再現性と同等である:ggplotプロットのグリッドの複数ページのpdfファイルを生成

library(ggplot2) 

# generate a data frame w same structure as the one I'm working with 
time <- c(1:10) 
veclist <- list() 
veclist[[1]] <- time 

for (i in 2:25){ 
    veclist[[i]] <- as.vector(c(runif(10,-2,2))) 
} 

d <- as.data.frame(do.call(rbind, veclist)) 
d <- as.data.frame(t(d)) 

colnames(d)[1] <- "time" 
for (i in 2:length(d)){ 
    colnames(d)[i] <- paste("name",i,sep=" ") 
} 

# for a common axis 
numericvalues <- d[,2:length(d)] 

# generate plot(s) 

name_list = paste("`",names(d),"`",sep="") 

plot_list = list() 
for (i in 2:length(d)) { 
    p = ggplot(d, aes_string(x=name_list[[1]], y=name_list[[i]])) + 
    geom_point() + 
    labs(x="time",title=paste(strwrap(names(d[i]), width = 30),collapse = "\n")) + 
    theme(plot.title = element_text(size=10,hjust = 0.5),axis.text.x=element_text(size=6)) + 
    coord_cartesian(ylim = c(min(numericvalues, na.rm = TRUE), max(numericvalues, na.rm = TRUE))) 
    plot_list[[i]] = p 
} 

私はplot_listのプロットの複数ページのPDFのグリッドを生成するために探しています(理想的には3列、ページごとのプロットの4行の)。

私が試してみましたいくつかのこと:

pdf("test.pdf") 
do.call("marrangeGrob",c(plot_list,ncol=3,nrow=2)) 

は読めないPDFファイルを生成します。

pdf("test.pdf") 
do.call("grid.arrange",c(plot_list)) 

は、「gList」エラーで許可された「grobs」のみを返します。

library(tidyr) 
df <- d %>% gather(var, val, -time) 
df_list <- split(df, df$var) 

(ⅱ:ここ

答えて

1

gridExtratidyr

との溶液(i)はそれぞれの名前に基づいてdata.frameのリストに、長い形式、および分割に幅のデータを変換しますlapply関数とそれぞれの名前のための)プロットPDFの2つのページ上の12個のプロット各々を印刷するgridExtraを用い

plots <- lapply(names(df_list), function(x){ 
       ggplot(df_list[[x]], aes(time, val)) + 
       geom_point() + 
       labs(x="time", title=x) 
       }) 

(III):

library(gridExtra) 
pdf("something.pdf") 
do.call(grid.arrange, c(plots[1:12], nrow=4)) 
do.call(grid.arrange, c(plots[13:24], nrow=4)) 
dev.off() 
2

この1つはマルチレイアウトを生成します。

library(gridExtra) 
... 
plot_list = list() 
for (i in 2:length(d)) { 
    p = ggplot(...) 
    plot_list[[i]] = ggplotGrob(p) 
} 
class(plot_list) <- c("arrangelist", class(plot_list)) 
ggsave("multipage.pdf", plot_list) 
2

あなたのプロットのリストが不足しているアイテムを持っているようです。ここでは、最小限の例では、

library(ggplot2) 

pl <- replicate(13, ggplot(), simplify = FALSE) 

ggsave("mp.pdf", gridExtra::marrangeGrob(grobs = pl, nrow=3, ncol=2)) 

ノートです:あなたはdev.off()を欠落していた

  • ので、無効なPDF
  • do.callはgrobs引数に
+0

を使用し、arrangeGrob(メートル)にはもはや必要ではありませんもちろん、プロットのリストを生成する方法は、リストの最初の項目がNULLであることを意味しました。私はそれを逃したとは信じられません - ありがとう! – jlotus

関連する問題