【问题标题】:knitr/rmarkdown - reducing html file sizeknitr/rmarkdown - 减少 html 文件大小
【发布时间】:2015-12-02 10:16:25
【问题描述】:

我想使用 knitr/rmarkdown 生成一个 html 文档。目前,该文件超过 20MB,我正试图找到一种方法来减少它。大文件可能是由于我的情节中有很多点。

如果我将输出类型更改为 pdf,我可以将其减少到 1.7MB。我想知道是否有办法减少我的文件,同时将其保留为 html

编辑:这是我在 RStduio 中所做的一个最小工作示例。

---
title: "Untitled"
author: "My Name"
date: "September 7, 2015"
output: html_document
---

```{r}
library(ggplot2)
knitr::opts_chunk$set(dev='svg')
```

```{r}
set.seed(1)
mydf <- data.frame(x=rnorm(2e4),y=rnorm(2e4))
ggplot(mydf, aes(x,y)) + geom_point(alpha=0.6)
```

我还注意到,如果我有太多观察结果,则根本不会生成图。我只是在输出中得到一个带有问号的空框。

```{r}
set.seed(2)
mydf <- data.frame(x=rnorm(5e4),y=rnorm(5e4))
ggplot(mydf, aes(x,y)) + geom_point(alpha=0.6)
# ...plot doesn't appear in output

```

【问题讨论】:

  • 具有许多观察值的散点图在矢量格式中可能比光栅图像更重,但如果这不是您当前项目的问题,您可以尝试使用 SVG 或更低分辨率图片。
  • @daroczig 我试过 svg,它确实有点帮助,但你能描述一下如何降低分辨率,因为我想进一步减小文件大小,我不介意是否必须牺牲画质。我通过添加一个最小的工作示例来编辑我的帖子。
  • 如果使用knitr,请参阅chunk options,尤其是dip 设置。

标签: html rstudio knitr resolution r-markdown


【解决方案1】:

按照@daroczig 的建议使用“dpi” knitr chunk 选项,我修改了您的代码如下(见下文)。

  • 您已将 dev 块选项设置为“svg”,这会生成非常大的矢量图形文件,尤其是对于由许多元素(点、线等)组成的图像。
  • 我将 dev 块选项重新设置为“png”,这是 HTML 输出的默认光栅图形格式。所以你根本不需要触摸它。保持 dev 块选项等于“png”会显着减小 HTML 输出文件的大小。
  • 我将 dpi 块选项设置为 36(默认值为 72),以降低图像分辨率,并进一步减小 HTML 输出文件的大小。
  • 我将 out.width 和 out.height 块选项设置为“600px”,以增加图像尺寸。
  • 您可以更改 dpi、out.width 和 out.height 选项,直到获得所需的 HTML 输出文件大小和图像尺寸。输出文件大小和图像分辨率之间需要权衡取舍。

编写代码后,我得到的 HTML 输出文件大小等于 653kB,即使在绘制 5e4 个数据点时也是如此。

---
title: "Change size of output HTML file by reducing resolution of plot image"
author: "My Name"
date: "September 7, 2015"
output: html_document
---

```{r}
# load ggplot2 silently
suppressWarnings(library(ggplot2))
# chunk option dev="svg" produces very large vector graphics files
knitr::opts_chunk$set(dev="svg")
# chunk option dev="png" is the default raster graphics format for HTML output
knitr::opts_chunk$set(dev="png")
```

```{r, dpi=36, out.width="600px", out.height="600px"}
# chunk option dpi=72 is the default resolution
set.seed(1)
mydf <- data.frame(x=rnorm(5e4),y=rnorm(5e4))
ggplot(mydf, aes(x,y)) + geom_point(alpha=0.6)
```

【讨论】:

    【解决方案2】:

    为了防止带有许多点的散点图扩大矢量图形的大小(以及相应的 html 输出),您可以使用 ggrastr 包中的 geom_point_raster()。吃蛋糕,也吃!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 2013-05-22
      • 2013-06-25
      • 2011-01-10
      相关资源
      最近更新 更多