2015-09-06 26 views
6

Voglio produrre un documento html usando knitr/rmarkdown. Attualmente il file ha superato i 20 MB e sto cercando di trovare un modo per ridurlo. La grande dimensione del file è probabilmente dovuta alle mie trame che hanno molti punti in esse.knitr/rmarkdown - riduzione della dimensione del file html

Se cambio il mio tipo di uscita in pdf, posso ridurlo a 1,7 MB. Mi chiedo se esiste un modo per ridurre il mio file conservandolo come html.

MODIFICA: Ecco un esempio di funzionamento minimo che ho fatto in 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) 
``` 

Ho anche notato che se ho troppe osservazioni, la trama non viene generata affatto. Ho appena ricevuto una casella vuota con un punto interrogativo nell'output.

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

trame Scatter con ** ** molte osservazioni possono essere più pesante in formato vettoriale rispetto ad un'immagine raster, ma se questo non è un problema con il progetto corrente, si potrebbe provare a SVG o immagini a bassa risoluzione. – daroczig

+0

@daroczig Ho provato svg e ha aiutato un po ', ma potresti descrivere come abbassare la risoluzione perché mi piacerebbe ridurre ulteriormente la dimensione del mio file e non mi importa se devo sacrificare la qualità dell'immagine. Ho modificato il mio post aggiungendo un esempio di lavoro minimo. –

+0

Se si utilizza 'knitr', vedere le [opzioni chunk] (http://yihui.name/knitr/options/) in particolare l'impostazione' dip'. – daroczig

risposta

7

Seguendo il suggerimento di @daroczig di utilizzare l'opzione knitr chunk "dpi", ho modificato il codice come segue (vedi sotto).

  • hai avuto impostare l'opzione dev pezzo uguale a "SVG", che produce file molto grandi grafica vettoriale, in particolare per le immagini composte da molti elementi (punti, linee, ecc)
  • Ho impostato il dev opzione chunk indietro uguale a "png", che è il formato grafico raster predefinito per l'output HTML. Quindi non è necessario toccarlo affatto. Mantenere l'opzione chunk di livello uguale a "png" riduce drasticamente la dimensione del file di output HTML.
  • Ho impostato l'opzione del blocco dpi pari a 36 (72 è l'impostazione predefinita), per ridurre la risoluzione dell'immagine e ridurre ulteriormente la dimensione del file di output HTML.
  • Ho impostato le opzioni out.width e out.height chunk pari a "600px", per aumentare le dimensioni dell'immagine.
  • È possibile modificare le opzioni dpi, out.width e out.height, finché non si ottiene la dimensione del file di output HTML e la dimensione dell'immagine come desiderato. C'è un compromesso tra la dimensione del file di output e la risoluzione dell'immagine.

Dopo aver elaborato il codice, ho ottenuto una dimensione del file di output HTML pari a 653kB, anche quando si tracciavano 5e4 punti dati.

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