Jak ustawić rozmiar lokalnego obrazu za pomocą knitr dla markdown?

Mam lokalny obrazek, który chciałbym umieścić w pliku .Rmd, który następnie knit przekonwertuję na slajdy HTML za pomocą Pandoc. Na ten post , to wstawi lokalny obrazek :
![Image Title](path/to/your/image)

Czy istnieje sposób, aby zmodyfikować ten kod, aby również ustawić rozmiar obrazu?

Author: Community, 2013-03-25

8 answers

Możesz również odczytać obraz używając na przykład pakietu png i narysować go jak zwykły Wykres używając grid.raster z pakietu grid.

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

Dzięki tej metodzie masz pełną kontrolę nad rozmiarem obrazu.

 104
Author: agstudy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-17 14:54:27

[16]}pytanie jest stare, ale wciąż cieszy się dużą uwagą. Ponieważ istniejące odpowiedzi są nieaktualne, tutaj bardziej aktualne rozwiązanie:

Zmiana rozmiaru lokalnych obrazów

Od knitr 1.12, istnieje funkcja include_graphics. Od ?include_graphics (podkreślenie):

Główną zaletą korzystania z tej funkcji jest to, że jest przenośna w tym sensie, że działa dla wszystkich formatów dokumentów, które obsługuje knitr, więc nie musisz myśleć, jeśli musisz używać na przykład LaTeX lub składnia Markdown, aby osadzić zewnętrzny obraz. opcje częściowe związane z wyjściami graficznymi, które działają dla normalnych Wykresów R, również działają dla tych obrazów, takich jak out.width i out.height.

Przykład:

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

Zalety:

  • Over odpowiedź agastudy: nie ma potrzeby korzystania z zewnętrznych bibliotek ani ponownego rastrowania obrazu.
  • Over Shruti Kapoor ' s answer: nie trzeba ręcznie pisać HTML. Poza tym obraz jest zawarty w samodzielnym Wersja pliku.

Łącznie z wygenerowanymi obrazami

Aby skomponować ścieżkę do wykresu, który jest wygenerowany w kawałku (ale nie jest dołączony), przydatne mogą być Opcje kawałka opts_current$get("fig.path") (ścieżka do katalogu rysunku) oraz opts_current$get("label") (Etykieta bieżącego kawałka). Poniższy przykład wykorzystuje fig.path do włączenia drugiego z dwóch obrazów, które zostały wygenerowane (ale nie wyświetlone) w pierwszej części:

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

Ogólny wzór ścieżek rysunków to [fig.path]/[chunklabel]-[i].[ext], gdzie chunklabel jest Etykieta fragmentu, w którym został wygenerowany Wykres, i jest indeksem wykresu (w tym fragmencie), a {[14] } jest rozszerzeniem pliku (domyślnie {[15] } W dokumentach RMarkdown).

 201
Author: CL.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Un updated answer: in knitr 1.17 You can simply use

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

Edit zgodnie z komentarzem @ jsb

Uwaga działa tylko bez spacji, np. {width = 250px} nie {width = 250px}

 117
Author: InspectorSands,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-17 18:55:34

Oto kilka opcji, które utrzymują plik samowystarczalny bez retasteryzacji obrazu:

Owiń obraz w div tagi

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

Użyj arkusza stylów

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;
}

Jeśli masz więcej niż jeden obrazek, może być konieczne użycie pseudo-selektora NTH-child dla tej drugiej opcji.

 38
Author: Nick Kennedy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 19:23:25

Jeśli konwertujesz do HTML, możesz ustawić rozmiar obrazu używając składni HTML używając:

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

Lub jakąkolwiek wysokość i szerokość chcesz dać.

 20
Author: Shruti Kapoor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-28 17:54:04

Miał dziś ten sam problem i znalazł inną opcję z knitr 1.16 podczas robienia na drutach PDF (co wymaga zainstalowania pandoc):

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

Ta metoda może wymagać przeprowadzenia prób i błędów, aby znaleźć rozmiar, który działa dla Ciebie. Jest to szczególnie wygodne, ponieważ sprawia, że umieszczanie dwóch obrazów obok siebie jest ładniejszym procesem. Na przykład:

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

Możesz stać się kreatywny i układać kilka z nich obok siebie i dopasowywać je według własnego uznania. Zobacz też https://rpubs.com/RatherBit/90926 więcej pomysłów i przykładów.

 9
Author: Taylor Pellerin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-08 08:35:13

Inną opcją, która mi się sprawdziła, jest gra z opcją dpi knitr::include_graphics() w następujący sposób:

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

... co na pewno (chyba, że robisz matematykę) jest metodą prób i błędów w porównaniu do definiowania wymiarów w kawałku, ale może to komuś pomoże.

 6
Author: Jan Alleman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-20 21:28:42

Rozwiązanie knitr:: include_graphics działało dobrze przy zmianie rozmiaru figur, ale nie byłem w stanie dowiedzieć się, jak użyć go do tworzenia obok siebie zmienionych figur. Znalazłem Ten post przydatny do tego.

 4
Author: S.M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:19