2016-06-15 74 views
5

Sto usando R Markdown con knitr in R Studio per creare e aggiornare un semplice sito Web del progetto per mantenere i miei colleghi aggiornati con un modello di analisi dei dati che sto costruendo. Ci sono alcuni grafici sulla pagina, che (per trame più piccole) finora ha funzionato bene, possono vedere il codice e i risultati nello stesso posto.Che cosa è un modo semplice per eseguire la miniatura di alcuni grafici in R Markdown/knitr?

Tuttavia, alcuni grafici sono diventati molto grandi (e devono rimanere grandi per consentire un rapido confronto affiancato dei modelli) e non si adattano molto bene alla pagina. Ho usato pdf caricati separatamente (con un link sulla pagina) per alcuni di essi. Sarebbe più bello se esistesse un modo semplice per generare miniature di alcuni di questi grafici, in modo che l'utente possa visualizzare un'immagine di trama piccola, fare clic su di essa e quindi esaminare l'immagine molto più grande in dettaglio. Tuttavia, se occorrono molti script manuali per ciascuna istanza di plot, preferirei non sprecare tempo e caricare solo un paio di pdf. Una domanda simile, here, parla del pacchetto, knitrbootsrap, ma non desidero creare l'anteprima tutte le mie trame, solo pochi eletti,. Il pacchetto sembra utilizzare Magnific popup, ma integrarlo da solo in una pagina Markdown sembra una seccatura (?). Non ho trovato nulla nel riferimento R Markdown guide. Naturalmente un modo sarebbe quello di generare due trame, una piccola, che viene mostrata, e collegarla a un'altra immagine/pdf di trama più grande che viene caricata separatamente - ma sarebbe più desiderabile un modo più semplice e automatico.

Da qui la domanda: c'è un modo più semplice per creare miniature di selezione cliccabili in R Markdown? più semplice.

risposta

1

Quindi, questo è quello che mi è venuto in mente. Aggiungere un gancio trama, in modo che si genera un pdf immagine a piena risoluzione prima di generare una piccola immagine nel pezzo:

allow_thumbnails <- function(x, options) { 
    if (!is.null(options$thumb)) { 
    filename <- sprintf("%s.full.pdf", strsplit(basename(x), "\\.")[[1]][1]) 
    absolute_path <- file.path(dirname(x), filename) 

    # generate the full resolution pdf 
    pdf(absolute_path, width = options$thumb$width, height = options$thumb$height) 
     eval(parse(text = options$code)) 
    dev.off() 

    # add an html link to the low resolution png 
    options$fig.link = absolute_path 
    } 

    knitr:::hook_plot_md_base(x, options) 
} 

E poi nel file Rmd, definisco la dimensione dell'immagine a risoluzione piena utilizzando il thumb argomento:

```{r init} 
    knit_hooks$set(plot = allow_thumbnails) 
``` 

```{r my_large_plot, fig.width = 15, fig.height = 15, thumb = list(width = 45, height = 45)} 
    my_large_plot() 
``` 

Questo genera un file html con un png cliccabile che porta al pdf.