ggarrange 生成一个空的 pdf 文件

ggarrange generates an empty pdf file

我正在处理一个采用大数据框(36 行和 194 列)的函数,该数据框执行主成分分析,然后生成一个图列表,其中我有 26 个主成分的组合,其中 325 in总计,使用 'expand.grid'.

我的问题是,当我使用 ggpubr 的 ggarrange() 将所有绘图合并到一个 pdf 文件中时,这个文件是空的。

我的代码:

一=26
row.pairs = 325

PC.Graph <- function(df, col1, col2, tag, id){
  df1 <- df[,-c(col1:col2)]
  pca <- prcomp(df1, scale. = T)
  pc.summ <- summary(pca)
  a <- sum(pc.summ$importance[3,] < 0.975)
  b <- c(1:a)
  pc.grid <- expand.grid(b, b)
  pc.pairs <- pc.grid[pc.grid$Var1 < pc.grid$Var2,]
  row.pairs <- nrow(pc.pairs)
  components <- c(1:row.pairs)
  S.apply.FUN <- function(x){
    c <- sapply(pc.pairs, "[", x, simplify = F)
    pcx <- c$Var1
    pcy <- c$Var2
    df2 <- df
    row.names(df2) <- df[, tag]
    name = paste("PCA_", pcx, "_vs_", pcy)
    autoplot(pca, data = df2, colour = id, label = T, label.repel = T, main = name,
             x = pcx, y = pcy)
  }
  all.plots <- Map(S.apply.FUN, components)
  pdf(file = "All_PC.pdf", width = 50, height = 70)
  print(ggarrange(all.plots))
  dev.off()
}

PC.Graph(Final_DF, col1 = 1, col2 = 5, tag = "Sample", id = "Maturation")

您必须将绘图列表传递给 ggarrange,但我不确定您能否从 PDF 文件的绘图区域中获得任何有用的绘图,因此我建议您将绘图列表拆分为块(例如 20 个)并将它们绘制到多个页面。

具体来说,我将从您的 PC.Graph 函数中导出 all.plots(并删除其中写入 PDF 的代码)。

我还会将 expand.grid(b, b) 更改为 t(combn(b, 2)),因为您不需要绘制两次 PC 组合。

然后我会做这样的事情:

# export the full list of plots
plots <- PC.Graph(Final_DF, col1 = 1, col2 = 5, tag = "Sample", id = "Maturation")

# split the plotlist
splitPlots <- split(plots, ceiling(seq_along(plots)/20))
plotPlots <- function(x){
    out <- cowplot::plot_grid(plotlist = x, ncol = 5, nrow = 4)
    plot(out)
}
pdf(file = "All_PC.pdf", width = 50, height = 45)
lapply(splitPlots, plotPlots)
dev.off()