ggplot2,dlply:超过n页的情节

时间:2017-11-06 02:40:33

标签: r pdf ggplot2

我正在尝试创建多个绘图(基于一个facet),以根据需要打印到尽可能多的pdf页面。这些图表代表了作者多年来的单一出版物引用次数。 这是一个玩具数据集:

Publications <-data.frame(Year=c(1,2,1,2,3,4,5),Publication=c(rep("A"),rep("B"),rep("C"),rep("D"),rep("E"),rep("F"),rep("G")),Author=c(rep("John",2),rep("Michael",5)),Citations=c(5,6,4,7,2,3,8))

为此,我开始创建一般情节并将其分配给“a”,如下所示:

a = ggplot(data = Publications, aes(x = Year, y = Citations, label=Citations)) +
  theme_minimal() +
  geom_point()+
  theme(axis.text.y=element_blank())

最后,我通过我的facet变量“Author”分割样本并将其保存为pdf,如下所示:

require(plyr)
plots <-dlply(Publications, .(Author), function(x) a %+% x + 
                facet_wrap_paginate(Author ~ Publication, ncol = 1, nrow = 3))
pdf()
plots
dev.off()
plots$plots

此代码生成一个包含两个页面的pdf。在第1页中,显示了两个与作者“John”对应的图表。在第2页中,对应于作者“Michael”的三个图也按照代码中的指定显示。问题是作者“迈克尔”实际上有5个出版物。所以,对于这个作者,应该显示5个图(第2页中的3个,另一个/下一页中的剩余2个)。我的问题是,如何编写代码,以便根据需要生成尽可能多的pdf页面?目前,它为每个方面/级别变量“作者”生成1页。但是,如果我允许这样做,对于一些作者来说,一页中会有太多的情节,使其难以阅读。因此,每页应该只有3个图,但需要的页数应该是多少。

1 个答案:

答案 0 :(得分:1)

根据ggforce的帮助页面,

  

“通常这将放在一个循环中逐个渲染所有页面”

因此需要计算页数并继续进行for循环。

另一种选择是marrangeGrob,

require(plyr)
plots <- dlply(Publications,
               .(Author, Publication), "%+%", e1 = a)
gridExtra::marrangeGrob(grobs = plots, nrow=3, ncol=1)