2012-06-26 32 views
5

Quiero hacer una sola figura en R con dos gráficos en un archivo de reducción con knitr. Normalmente, esto es fácil de hacer con layout(t(1:2)) o par(mfrow=c(1,2)). ¿Puedo hacer esto con knitr, o siempre tendrá dos figuras separadas?Uso del diseño con knitr

Aquí es un ejemplo de trabajo mínimo que crea un archivo llamado ./junk.Rmd y ./junk.md en su directorio de trabajo junto con dos archivos ./figure/junkislands1.png (que sólo incluye la primera trama) y ./figure/junkislands2.png (que incluye ambas parcelas que yo quiero).

require(knitr) 
temp <- "```{r junkislands, fig.width=8, fig.height=5} 
layout(t(1:2)) 
pie(islands) 
barplot(islands) 
```" 
cat(temp, file="junk.Rmd") 
knit("junk.Rmd", "junk.md") 

El problema no es tanto que se crea dos archivos .png, sino más bien que el archivo de rebajas junk.md incluye a ambos.

Cuando hago ese recargo en html, incluye ambos archivos .png cuando solo quiero uno con las dos figuras trazadas.

Aquí está el archivo junk.md que se genera a partir knitr:

```r 
par(mfrow = c(1, 2)) 
pie(islands) 
``` 

![plot of chunk junkislands](figure/junkislands1.png) 

```r 
barplot(islands) 
``` 

![plot of chunk junkislands](figure/junkislands2.png) 
+0

en sentido estricto, esto es un error de 'knitr' (https://github.com/yihui/knitr/issues/292); Trataré de arreglarlo más tarde; gracias –

+0

He [reparado] (https://github.com/yihui/knitr/commit/3508ddb86f0068c17570b3c71dc1e79414041627) este error en la versión de desarrollo: https://github.com/yihui/knitr#readme Ciertamente puedes usar 'fig .keep = 'last'', pero eso ya no será necesario. –

Respuesta

11

Tenga una mirada en http://yihui.name/knitr/options y específicamente fig.keep. Creo que quieres fig.keep = 'last'

require(knitr) 
temp <- "```{r junkislands, fig.width=8, fig.height=5, fig.keep = 'last'} 
layout(t(1:2)) 
pie(islands) 
barplot(islands) 
```" 
cat(temp, file="junk.Rmd") 
knit("junk.Rmd", "junk.md") 

da

```r 
layout(t(1:2)) 
pie(islands) 
barplot(islands) 
``` 

![plot of chunk junkislands](figure/junkislands.png) 
+1

solo una nota al margen: puede llamar 'knit (text = temp)' directamente en lugar de escribir el texto en 'junk.Rmd'. –

Cuestiones relacionadas