ggplot图的网格页面pdf文件

我正尝试从ggplots列表中生成ggplots网格的多页面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(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)

你的情节列表似乎有一个缺失的项目。 这是一个最小的例子

library(ggplot2)

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

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

笔记:

  • 你错过了dev.off()因此无效的pdf
  • (m)arrangeGrob中不再需要do.call ,请使用grobs参数

  • 这是一个使用gridExtratidyr的解决方案

    (i)将宽数据转换为长格式,并根据每个名称拆分为data.frame列表:

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

    (二)绘制每个名字与lapply函数

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

    (iii)使用gridExtra在pdf的两页上分别打印12个图表:

    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()
    
    链接地址: http://www.djcxy.com/p/30885.html

    上一篇: page pdf file of a grid of ggplot plots

    下一篇: plotting multiple images together using ggmap and plotRGB