knitr/rmarkdown - 减小 html 文件大小

15
我希望使用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

```


3
如果您的项目不需要考虑这个问题,散点图中有许多观测值在向量格式下可能比光栅图像更重,但您可以尝试使用SVG或低分辨率图像。 - daroczig
@daroczig 我尝试使用 SVG 进行了一些改动,虽然有所帮助,但是你能描述一下如何降低分辨率吗?因为我想进一步减小文件大小,即使需要牺牲图像质量也没有关系。我通过添加一个最小工作示例来编辑了我的帖子。 - Maria Reyes
如果使用 knitr,请参见代码块选项,特别是 dip 设置。 - daroczig
2个回答

13

根据@daroczig的建议,我将"dpi" knitr代码块选项修改为如下(见下文)。

  • 你之前设置了dev代码块选项等于"svg",这会生成非常大的矢量图形文件,特别是对于由许多元素(点、线等)组成的图像。
  • 我将dev代码块选项设置回默认的"png",这是HTML输出的默认光栅图形格式,所以你完全不需要更改它。保持dev代码块选项等于"png"可以显著降低HTML输出文件的大小。
  • 我将dpi代码块选项设置为36(默认值为72),以降低图像分辨率,进一步减小HTML输出文件的大小。
  • 我将out.width和out.height代码块选项设置为"600px",以增加图像尺寸。
  • 你可以调整dpi、out.width和out.height选项,直到得到你想要的HTML输出文件大小和图像尺寸。输出文件大小和图像分辨率之间存在权衡。

运行代码后,即使绘制了5e4个数据点,我得到了一个大小为653kB的HTML输出文件。

---
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)
```

1
它确实减小了嵌入图像的大小和分辨率,但尽管如此,由于文件头部添加了长时间的Javascript代码,HTML文件仍然很大。这些是否真的必要? - Denis Cousineau
@DenisCousineau 当我在我的Mac上编织R代码时,我得到了一个824kb的html文件。我检查了这个html文件,但是我没有看到太多的Javascript。 - algoquant

1
为了防止散点图中的许多点使您的矢量图形(以及相应的HTML输出)变得过大,您可以使用ggrastr包中的geom_point_raster()。吃蛋糕也能保持身材!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接