2015-09-06 14 views
6

Ich möchte ein HTML-Dokument mit knitr/rmarkdown erstellen. Momentan ist die Datei über 20 MB groß und ich versuche einen Weg zu finden, sie zu reduzieren. Die große Dateigröße ist wahrscheinlich auf meine Plots zurückzuführen, die viele Punkte enthalten.knitr/rmarkdown - HTML-Dateigröße reduzieren

Wenn ich meinen Ausgabetyp zu pdf ändere, kann ich es auf 1.7MB herunter bekommen. Ich frage mich, ob es eine Möglichkeit gibt, meine Datei zu reduzieren, während es als html gehalten wird.

EDIT: Hier ist ein minimales Arbeitsbeispiel, das ich in RStduio gemacht habe.

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

Ich habe auch bemerkt, dass, wenn ich zu viele Beobachtungen haben, ist die Handlung nicht erzeugt erhalten. Ich bekomme nur eine leere Box mit einem Fragezeichen in der Ausgabe.

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

Streudiagramme mit ** vielen ** Beobachtungen können im Vektorformat im Vergleich zu einem Rasterbild schwerer sein, aber wenn dies bei Ihrem aktuellen Projekt nicht der Fall ist, können Sie SVG oder Bilder mit niedrigerer Auflösung versuchen. – daroczig

+0

@daroczig Ich habe versucht Svg und es hat ein wenig geholfen, aber könnten Sie beschreiben, wie Sie die Auflösung senken, weil ich meine Dateigröße weiter reduzieren möchte und es mir nichts ausmacht, wenn ich Bildqualität zu opfern. Ich habe meinen Post bearbeitet, indem ich ein funktionierendes Beispiel hinzugefügt habe. –

+0

Wenn Sie 'knitr' verwenden, beachten Sie die [chunk options] (http://yihui.name/knitr/options/), insbesondere die Einstellung 'dip'. – daroczig

Antwort

7

Anregung von @daroczig Im Anschluss an die "dpi" knitr chunk Option zu verwenden, modifizierte ich Ihren Code wie folgt (siehe unten).

  • Sie hatten die Entwickler chunk Option gleich „svg“ gesetzt, die Grafikdateien sehr große Vektor produziert, vor allem für Bilder aus vielen Elementen (Punkte, Linien, etc.)
  • ich die Entwickler eingestellt Chunk-Option zurück gleich "png", das ist das Standard-Raster-Grafikformat für die HTML-Ausgabe. Du brauchst es also nicht zu berühren. Wenn Sie die Option dev chunk gleich "png" beibehalten, wird die Größe der HTML-Ausgabedatei drastisch reduziert.
  • Ich setze die dpi-Chunk-Option gleich 36 (72 ist die Standardeinstellung), um die Bildauflösung zu verringern und die HTML-Ausgabedatei weiter zu verkleinern.
  • Ich legte die Optionen "out.width" und "out.height chunk" gleich "600px" fest, um die Bildgröße zu erhöhen.
  • Sie können die Optionen dpi, out.width und out.height ändern, bis die Größe der HTML-Ausgabedatei und die Bildgröße Ihren Vorstellungen entsprechen. Es gibt einen Kompromiss zwischen der Größe der Ausgabedatei und der Bildauflösung.

Nach dem Code Stricke, bekam ich eine Dateigröße HTML-Ausgabe gleich 653KB, auch wenn Punkte 5e4 grafische Darstellung von Daten.

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