防止ggplot2切断Sweave PDF中的图表

时间:2015-07-14 15:26:16

标签: r charts ggplot2 knitr sweave

使用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报告中得到的内容:

ChartCutOff1

ChartCutOff2

粗体灰线是分页符

无论如何我可以强制ggplot2在下一页打印图表吗? 当第二张图表不适合同一页面时,我更喜欢有一种方法可以 。如果由于某种原因这两个图表都适合页面,那么我可以在那里同时使用。

0 个答案:

没有答案