【问题标题】:Making flattened pdfs in Sweave在 Sweave 中制作扁平化的 pdf
【发布时间】:2012-10-18 10:18:08
【问题描述】:

所以我正在使用 Sweave 创建 pdf,其中包含一些带有大量点的图形。我可以很好地获得 pdf,但它似乎已经创建了很多层,因此很难在 Acrobat 或 Reader 中打开文件。当我这样做时,我真的可以看到文件上加载的点。

有没有办法在 Sweave 中将 pdf 展平,使其不那么笨重?

(请注意,我正在使用 RStudio。我知道我可能应该使用其他东西,但我还没有找到任何可以顺利运行的东西。)

【问题讨论】:

  • 你的图形目前是什么格式的?
  • ...好问题?它们是直接从 R 代码生成的。
  • 如果您使用默认值,那么它们是 eps 和 pdf 请参阅 statistik.lmu.de/~leisch/Sweave/FAQ.html 我建议转换为 knitr ,您可以轻松地指定设备并使用 pngjpeg 哪个会更小。
  • Whew 作为一个选项看起来真的很不错,但现在我遇到了所有这些选项冲突。如果这是唯一的方法,我将学会绕过它们,但还有其他仅使用 Sweave 的选项吗?
  • sweave 过渡到knitr 相当容易,作者为此提供了很好的指导。这将非常值得您花时间(除非您很少使用 sweave)。

标签: r pdf latex sweave rstudio


【解决方案1】:

没有必要为此切换到 Knitr,尽管这样做有很多好处。

一种解决方案是安排生成绘图文件,然后自己包含它,而不是依靠 Sweave 为您完成

<<gen_fig, echo=true, eval=true>>=
png("path/to/fig/location/my_fig.png")
plot(1:10)
dev.off()
@

\includegraphics[options_here]{path/to/fig/location/my_fig}

另一种选择是考虑具有“大量点”的图是否有用 - 你能看到所有点吗?是兴趣点的密度吗?替代方法包括通过 hexbin 包进行绘图或生成点的二维密度并将其绘制为较低密度的点集。 ggplot2 包内置了很多这样的功能,参见例如以stat__bin2d()stat_binhex() 为例。

【讨论】:

    【解决方案2】:

    正如 Gavin 所说,没有必要为此切换到 knitr,尽管这样做还有其他好处。但是,您甚至不需要编写自己的保存和包含代码; Sweave 可以为您做到这一点。如果初始文档是:

    \documentclass{article}
    \usepackage[american]{babel}
    \begin{document}
    
    <<>>=
    n <- 100000
    DF <- data.frame(x=rnorm(n), y=rnorm(n))
    @
    
    <<gen_fig, fig=TRUE>>=
    plot(DF)
    @
    
    \end{document}
    

    然后只需将参数更改为图形块,就可以获得 PNG 而不是 PDF:

    <<gen_fig, fig=TRUE, png=TRUE, pdf=FALSE>>=
    plot(DF)
    @
    

    在这个简单的示例中,它将我的最终 PDF 从 685K 缩小到 70K。

    【讨论】:

      【解决方案3】:

      正如已经提到的,您可能应该切换到knitr,这样可以更好地在 pdf 和其他格式之间进行交换。特别是,您应该查看:

      • knitr 和 sweave 之间的transition guide
      • global options:这样您就可以轻松地在 pdf、高分辨率 png 和低分辨率 png 之间切换。
      • caching:仅在需要时生成数字。

      以下是使用 PNG 设备的示例:

      \documentclass{article}
      \begin{document}
      
      <<gen_fig, dev='png'>>=
      n <- 100000
      DF <- data.frame(x=rnorm(n), y=rnorm(n))
      plot(DF)
      @
      
      \end{document}
      

      无需为knitr 指定fig=TRUE。如果graphics包中的PNG设备的图像质量不够,您可以轻松切换到其他PNG设备,例如dev='CairoPNG''Cairo_png'。在 Sweave 中,您只需编写更多代码来做同样的事情。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-15
        • 2023-04-07
        • 1970-01-01
        • 2020-12-04
        • 1970-01-01
        相关资源
        最近更新 更多