Как установить размер для локального изображения с помощью knitr для уценки?

У меня есть локальное изображение, которое я хотел бы включить в файл .Rmd, который я затем knit и конвертирую в слайды HTML с Pandoc. Per этот пост, это добавит местное изображение:
![Image Title](path/to/your/image)

Есть ли способ изменить этот код, чтобы установить размер изображения?

Ответ 1

Вы также можете прочитать изображение с помощью пакета png, например, и построить его как обычный график, используя grid.raster из пакета grid.

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

С помощью этого метода вы полностью контролируете размер изображения.

Ответ 2

Вопрос старен, но все равно получает много внимания. Поскольку существующие ответы устарели, здесь представлено более современное решение:

Изменение размера локальных изображений

В knitr 1.12 существует функция include_graphics. Из ?include_graphics (выделено мной):

Основным преимуществом использования этой функции является то, что она переносима в том смысле, что она работает для всех форматов документов, поддерживаемых knitr, поэтому вам не нужно думать, если вам нужно использовать, например, LaTeX или Markdown синтаксис, чтобы встроить внешний образ. Для этих изображений также работают функции блоков, связанные с графическим выходом, которые работают для нормальных графиков R, например out.width и out.height.

Пример:

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

Преимущества:

  • Более ответ agastudy: нет необходимости в внешних библиотеках или для повторного растрирования изображения.
  • Ответ Shruti Kapoor: Не нужно вручную писать HTML. Кроме того, изображение включено в автономную версию файла.

Включая сгенерированные изображения

Чтобы составить путь к сюжету, который генерируется в куске (но не включен), могут быть полезны опции chunk opts_current$get("fig.path") (путь к каталогу рисунков), а также opts_current$get("label") (метка текущего фрагмента). В следующем примере используется fig.path для включения второго из двух изображений, которые были сгенерированы (но не показаны) в первом фрагменте:

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

Общий шаблон путей рисунка [fig.path]/[chunklabel]-[i].[ext], где chunklabel - это метка фрагмента, в котором был создан график, i - это индекс сюжета (внутри этого фрагмента), а ext - файл расширение (по умолчанию png в документах RMarkdown).

Ответ 3

Вот некоторые параметры, которые сохраняют файл автономно без повторной настройки изображения:

Оберните изображение в теги div

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

Используйте таблицу стилей

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

Если у вас есть несколько изображений, вам может понадобиться использовать псевдо-селектор nth-child для этого второго варианта.

Ответ 4

Если вы конвертируете в HTML, вы можете установить размер изображения с помощью синтаксиса HTML, используя:

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

или любой высоты и ширины, которые вы хотели бы дать.

Ответ 5

Un обновленный ответ: в knitr 1.14 вы можете просто использовать

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

Ответ 6

Решение knitr:: includes_graphics хорошо работало для изменения размеров фигур, но мне не удалось выяснить, как использовать его для создания уменьшенных размеров. Я нашел этот пост, полезный для этого.

Ответ 7

Имел ту же самую проблему сегодня и нашел еще один вариант с knitr 1.16 при вязании в PDF (для этого требуется, чтобы вы установили pandoc):

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

Этот метод может потребовать, чтобы вы выполнили несколько проб и ошибок, чтобы найти размер, который работает для вас. Это особенно удобно, потому что он делает два изображения бок о бок более красивым процессом. Например:

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

Вы можете получить креатив и собрать пару из них рядом и размер их, как вы сочтете нужным. См. https://rpubs.com/RatherBit/90926 для получения дополнительных идей и примеров.