【问题标题】:Print multiple plots on multiple pages in pdf在 pdf 的多个页面上打印多个绘图
【发布时间】:2017-12-26 11:06:17
【问题描述】:

我有很多质谱数据图,我想将它们合理地分布在 pdf 中的多个页面上。这个想法是,这些图垂直对齐以便于比较。这就是为什么我需要它们具有一定的可读维度,并且我希望每组图一起放在一页上,下一组在下一页上,依此类推。 到目前为止,我设法获得了:每个文件一页上的尺寸良好的图,用于多个文件;或者:在一个 pdf 中的几页上的尺寸很差。我想在一个 pdf 中的几页上绘制尺寸良好的图。

我的数据在COMBO

这是我的解决方案 (1) 的代码:

totalrows <- nrow(COMBO)
pagesneeded <- ceiling(totalrows/9)

for(i in 1:pagesneeded){
combolongrow <- melt(COMBO, id.vars = "UnID")
pl<- ggplot(combolongrow, aes(x=variable , y=value, group=UnID)) +
    geom_line() +
    theme(strip.text.y = element_text(size=6)) +
    xlab("Fraction") +
    ylab("iBAQ") +
    facet_wrap_paginate(~UnID, ncol = 1, nrow = 9, page = i, 
    strip.position="top", scales="free_y") 
    ggsave(paste("plot-", i, ".pdf", sep=""), width=21, height=29, units ="cm", dpi = 300)
}

这会为每组绘图创建一个间隔很好的 A4 pdf,在我的例子中总共有 8 个 pdf 文件。

输出:所有间距都很好,但每一页都是一个单独的文件

示例(2):

totalrows <- nrow(COMBO)
pagesneeded <- ceiling(totalrows/9)

pdf("Plots.pdf", paper = "a4")
for(i in 1:pagesneeded){
combolongrow <- melt(COMBO, id.vars = "UnID")
pl<- ggplot(combolongrow, aes(x=variable , y=value, group=UnID)) +
    geom_line() +
    theme(strip.text.y = element_text(size=6)) +
    xlab("Fraction") +
    ylab("iBAQ") +
    facet_wrap_paginate(~UnID, ncol = 1, nrow = 9, page = i, strip.position="top", scales="free_y") 

   print(pl)
}
dev.off()

这会创建一个文件(耶),但绘图的大小调整为默认的图形设备大小,这是错误的纵横比,并且在绘图的所有四个边上都留下了很大的边距,使数据不可读。

输出:间距不好,但所有页面都会自动放在一个文档中。

我该怎么做才能将通过ggsave 的所有图放到一个文件中?或者我怎样才能改变我的地块的尺寸,以便pdf() 以正确的尺寸拾取它们?

感谢您的帮助!

【问题讨论】:

  • 你试过用par(mfrow = c(9, 1)) 举例吗?
  • 我会在哪里添加它来做什么?我现在尝试了两种可能性,但无法更改输出。我尝试阅读有关 par() 的内容,但没有完全理解它的作用。
  • 也许您应该使用您的第一个解决方案并稍后合并 PDF 文件。例如,您可以使用plotflow:::mergePDF(请参阅stackoverflow.com/a/26846704/6103040)。
  • 谢谢。我试过了,但它让我陷入了要安装的软件包的困境,无论出于何种原因,都会在我的 R 安装(RStudio,R 3.4.x)上抛出很多错误。我想我的最终解决方案是使用外部 pdf 合并器将输出文件合并为一个大 pdf。
  • 你是用devtools::install_github("trinker/plotflow")安装的吗?我不必安装任何软件包。

标签: r pdf plot


【解决方案1】:

试试这个:

pdf("Plots.pdf", paper = "a4")
par.save <- par(mfrow = c(4, 1))
for(i in 1:20) {
  plot(1:10)
}
par(par.save)
dev.off()

【讨论】:

  • 哼,这与您使用facet_wrap_paginate 的解决方案没有什么不同:/
猜你喜欢
  • 1970-01-01
  • 2010-11-26
  • 2016-08-30
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多