web-dev-qa-db-fra.com

Comment définir la taille d'une image locale à l'aide de knitr pour le démarquage?

J'ai une image locale que je voudrais inclure dans un fichier .Rmd que je vais ensuite convertir knit et convertir en diapositives HTML avec Pandoc. Per this post , ceci insérera l'image locale:
![Image Title](path/to/your/image)

Est-il possible de modifier ce code pour définir également la taille de l'image?

123
Adam Smith

Vous pouvez également lire l'image en utilisant le package png par exemple et la représenter comme un tracé standard en utilisant grid.raster à partir du package grid.

```{r fig.width=1, fig.height=10,echo=FALSE}
library(png)
library(grid)
img <- readPNG("path/to/your/image")
 grid.raster(img)
```

Avec cette méthode, vous avez le plein contrôle de la taille de votre image.

89
agstudy

La question est ancienne, mais reçoit toujours beaucoup d'attention. Les réponses existantes étant obsolètes, voici une solution plus moderne:

Redimensionnement des images locales

A partir de knitr 1.12 , il existe la fonction include_graphics. De ?include_graphics (c'est moi qui souligne):

Le principal avantage de l'utilisation de cette fonction est qu'elle est portable dans la mesure où elle fonctionne pour tous les formats de document pris en charge par knitr. Vous n'avez donc pas besoin de penser si vous devez utiliser, par exemple, la syntaxe LaTeX ou Markdown. , pour intégrer une image externe. Les options de bloc associées aux sorties graphiques qui fonctionnent pour les tracés R normaux fonctionnent également pour ces images, telles que out.width et out.height.

Exemple:

```{r, out.width = "400px"}
knitr::include_graphics("path/to/image.png")
```

Avantages:

  • Over réponse de agastudy : Pas besoin de bibliothèques externes ni de re-raster l'image.
  • Over réponse de Shruti Kapoor : Inutile d'écrire manuellement le code HTML. En outre, l'image est incluse dans la version autonome du fichier.

Y compris les images générées

Pour composer le chemin d'accès à un tracé généré dans un bloc (mais non inclus), les options de bloc opts_current$get("fig.path") (chemin du répertoire de la figure) ainsi que opts_current$get("label") (étiquette du morceau en cours) peut être utile. L'exemple suivant utilise fig.path pour inclure la deuxième des deux images générées (mais non affichées) dans le premier bloc:

```{r generate_figures, fig.show = "hide"}
library(knitr)
plot(1:10, col = "green")
plot(1:10, col = "red")
```

```{r}
include_graphics(sprintf("%sgenerate_figures-2.png", opts_current$get("fig.path")))
```

Le modèle général des chemins de figure est [fig.path]/[chunklabel]-[i].[ext], où chunklabel est l’étiquette du bloc où le tracé a été généré, i est l’indice du tracé (dans ce bloc) et ext est l'extension de fichier (par défaut png dans les documents RMarkdown).

165
CL.

Réponse mise à jour: dans knitr 1.17, vous pouvez simplement utiliser

![Image Title](path/to/your/image){width=250px}
69
InspectorSands

Voici quelques options qui permettent de garder le fichier autonome sans retaster l’image:

Enveloppez l'image dans les balises div

<div style="width:300px; height:200px">
![Image](path/to/image)
</div>

Utiliser une feuille de style

test.Rmd

---
title: test
output: html_document
css: test.css
---

## Page with an image {#myImagePage}

![Image](path/to/image)

test.css

#myImagePage img {
  width: 400px;
  height: 200px;
}

Si vous avez plusieurs images, vous devrez peut-être utiliser le pseudo-sélecteur pour le deuxième enfant pour cette deuxième option.

32
Nick Kennedy

Si vous convertissez au format HTML, vous pouvez définir la taille de l'image à l'aide de la syntaxe HTML à l'aide de:

  <img src="path/to/image" height="400px" width="300px" />

ou quelle que soit la hauteur et la largeur que vous souhaitez donner.

19
Shruti Kapoor

J'ai eu le même problème aujourd'hui et j'ai trouvé une autre option avec knitr 1.16 lors du tricotage pour PDF (ce qui nécessite l'installation de pandoc):

![Image Title](path/to/your/image){width=70%}

Cette méthode peut nécessiter que vous fassiez quelques essais et erreurs pour trouver la taille qui vous convient. C’est particulièrement pratique car cela facilite la juxtaposition de deux images. Par exemple:

![Image 1](path/to/image1){width=70%}![Image 2](path/to/image2){width=30%}

Vous pouvez faire preuve de créativité et empiler deux ou trois côte à côte et les dimensionner à votre guise. Voir https://rpubs.com/RatherBit/90926 pour plus d'idées et d'exemples.

7
Taylor Pellerin

La solution knitr :: include_graphics fonctionnait bien pour redimensionner les chiffres, mais je n’étais pas en mesure de l’utiliser pour produire des chiffres redimensionnés côte à côte. J'ai trouvé ce post utile pour le faire.

4
S.M.

Une autre option qui a fonctionné pour moi est de jouer avec l'option dpi de knitr::include_graphics() comme ceci:

```{r}
knitr::include_graphics("path/to/image.png", dpi = 100)
```

... ce qui est sûr (sauf si vous faites le calcul) est un essai et une erreur par rapport à la définition des dimensions dans le bloc, mais peut-être que cela aidera quelqu'un.

3
Jan Alleman