14

我必须创建一堆包含大量数据点的图表。到目前为止,我一直在通过将它们全部绘制到一个文件中来做到这一点pdf

pdf("testgraph.pdf")  
par(mfrow=c(3,3))

for (i in 2:length(names(mtcars))){
  plot(mtcars[,1], mtcars[,i])
}

dev.off()

但是,如果有很多数据点,pdf文件就会变得太大。因为我对出色的质量不感兴趣,所以我不在乎我的情节是否是矢量图形。所以我想创建这些图png,然后将它们插入到一个pdf文件中。R除了创建图表并将它们插入其中pdf之外,有没有办法做到这一点knitr(我认为这对于这么简单的工作来说太乏味了)?

4

3 回答 3

17

你可以

  1. 创建每个情节的 .png 文件
  2. 使用png包将它们读回并
  3. 使用将它们绘制在 pdf 中grid.arrange
library(png)
library(grid)
library(gridExtra)

thePlots <- lapply (2:length(names(mtcars)), function(i) {
  png("testgraph.png")
  plot(mtcars[,1], mtcars[,i])

  dev.off()
  rasterGrob(readPNG("testgraph.png", native = FALSE),
    interpolate = FALSE)
})

pdf("testgraph.pdf")
do.call(grid.arrange, c(thePlots, ncol = 3))
dev.off()
于 2013-09-17T14:43:36.343 回答
6

If the source of the problem is too many points in the plot then you might want to consider using hexagonal binning instead of a regular scatterplot. You can use the hexbin package from bioconductor or the ggplot2 package has hexagonal binning capabilities as well. Either way you will probably get a more meaningful plot as well as smaller file size when creating a pdf file directly.

于 2013-09-17T14:50:06.400 回答
3

您可以使用ImageMagick将 PNG 文件转换为 PDF

for i in *.png
do
  convert "$i" "$i".pdf
done

并将生成的文件与pdftk连接起来。

pdftk *.png.pdf output all.pdf
于 2013-09-17T14:41:17.113 回答