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()
我正在处理一个采用大数据框(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()