2015-09-06 87 views
6

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

如果我改变我的输出类型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 

```

+2

有** **许多观察散点图可以在矢量格式较重相比光栅图像,但如果这不是与您当前项目的问题,你可以尝试SVG或更低分辨率的图像。 – daroczig

+0

@daroczig我试过svg,它的确有些帮助,但是您能否描述如何降低分辨率,因为我想进一步缩小文件大小,并且不介意是否必须牺牲图像质量。我通过添加最低工作示例编辑我的帖子。 –

+0

如果使用'knitr',请参阅[chunk options](http://yihui.name/knitr/options/),特别是“dip”设置。 – daroczig

回答

7

继@daroczig使用 “DPI” knitr块选项的建议,我修改您的代码如下(见下文)。

  • 您设置了dev的大块选项等于“SVG”,这会产生非常大的矢量图形文件,尤其是对于由许多元素的图像(点,线等)
  • 我设定的开发chunk选项返回等于“png”,这是HTML输出的默认光栅图形格式。所以你根本不需要碰它。保持dev chunk选项等于“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) 
```