2012-06-26 3 views
5

Je veux faire une seule figure dans R avec deux parcelles dans un fichier démarqué avec knitr. Normalement, cela est facile à faire avec layout(t(1:2)) ou par(mfrow=c(1,2)). Est-ce que je peux faire ceci avec knitr, ou fera-t-il toujours deux figures séparées?Utilisation de la mise en page avec knitr

Voici un exemple de travail minimum qui crée un fichier appelé ./junk.Rmd et ./junk.md dans votre répertoire de travail avec deux fichiers ./figure/junkislands1.png (qui ne comprend que le premier tracé) et ./figure/junkislands2.png (qui comprend les deux parcelles que je veux).

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

Le problème est pas tant que cela crée deux fichiers .png, mais plutôt que le fichier Markdown junk.md comprend deux d'entre eux. Quand je fais cette démarque en HTML, il inclut les deux fichiers .png quand je veux seulement celui avec les deux figures tracées.

Voici le fichier junk.md qui est généré à 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

à proprement parler, c'est un bug de 'knitr' (https://github.com/yihui/knitr/issues/292); Je vais essayer de le réparer plus tard; merci –

+0

J'ai [fixe] (https://github.com/yihui/knitr/commit/3508ddb86f0068c17570b3c71dc1e79414041627) ce bug dans la version de développement: https://github.com/yihui/knitr#readme Vous pouvez certainement utiliser 'fig .keep = 'last'', mais cela ne sera plus nécessaire. –

Répondre

11

Jetez un oeil à http://yihui.name/knitr/options et plus particulièrement fig.keep. Je pense que vous voulez 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") 

donne

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

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

juste une note de côté - vous pouvez appeler 'knit (text = temp)' directement au lieu d'écrire le texte à 'junk.Rmd'. –

Questions connexes