2015-09-06 90 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) 
```