使用ggplot2生成图表列表时,如何确保每个图表都以PDF格式打印在自己的页面上?
我在R Sweave(.Rnw)文件中创建脚本。在脚本中,我使用ggplot2和knitr创建了超过30个图表的列表。第二个图表代码使用循环创建30多个图表。我如何编写它以便每个新图表在新页面上打印?
以下是我用来创建图表的两个不同代码的一些示例:
<<Benchmarks1,echo=FALSE, results=TRUE, message=FALSE, warning=FALSE>>=
library(ggplot2)
library(data.table)
versions<-unique(Testdf[order(Testdf$Number), ][,2])
Testdf <- Testdf[complete.cases(Testdf),]
setDT(Testdf)
Testdf <- Testdf[, Benchmark := Value[Category== "Time"][which.min(Number[Category == "Time"])], by = FileName]
Testdf$Version<-factor(Testdf$Version, levels = versions)
Testdf$Deviation<-Testdf$Value- Testdf$Benchmark
Testdf$DeviationP<-(Testdf$Value- Testdf$Benchmark)/Testdf$Benchmark
g <-ggplot(subset(Testdf, Category == 'Time') , aes(color = Value, x = Version, y = DeviationP, group = FileName)) +
geom_line(size=.25) + geom_point(aes(shape = Build), size = 1.5) +
scale_shape_manual(values=c(1,15)) +
ylab("Run Time Deviation from Benchmark (%)") +
scale_colour_gradient(name = 'Run Time (min)',low = 'blue', high = 'red') +
coord_cartesian(ylim=c(-3,7)) +
theme(axis.text.x = element_text(size = 10, angle = 90, vjust = .5)) + theme(axis.title.y = element_text(vjust = 1)) +
theme(axis.title.x = element_text(vjust = -0.1)) + theme(plot.margin=unit(c(0,0,0,0),"mm"))
g
@
<<Charts, echo=FALSE, results=TRUE, message=FALSE, warning=FALSE>>=
library(ggplot2)
versions<-unique(Testdf[order(Testdf$Number), ][,2])
Testdf$Version<-factor(Testdf$Version, levels = versions)
files<-unique(Testdf$FileName)
for (i in 1:36){
p <- ggplot(subset(Testdf, FileName== files[i]), aes(x=Version, y=Value, group=FileName))
p <- p + geom_line(size=.25) + geom_point(shape = 19, size = 1.2, colour = 'red') +
scale_shape_manual(values=c(1,15)) + stat_summary(fun.y=sum, geom="line") +
ggtitle(files[i]) +
facet_grid(Category ~ ., scales = "free", space = "fixed") +
ylab("Value") + xlab("Version") +
expand_limits(y=0) +
theme(axis.text.x = element_text(size = 10, angle = 90, vjust = .5)) + theme(axis.title.y = element_text(vjust = 1)) +
theme(axis.title.x = element_text(vjust = -0.1)) + theme(panel.margin = unit(0.3, "lines")) + theme(plot.margin=unit(c(0,0,0,0),"mm"))
print(p)
}
@
我认为没有理由提供数据外观的示例。如果您不这么认为,请在评论中告诉我。
这是我在PDF报告中得到的内容:
粗体灰线是分页符
无论如何我可以强制ggplot2在下一页打印图表吗? 当第二张图表不适合同一页面时,我更喜欢有一种方法可以 。如果由于某种原因这两个图表都适合页面,那么我可以在那里同时使用。