Увеличить импортированное изображение на странице в Officer / officedown в Word (docx)

Недавно я попытался использовать officedown для создания отчета в формате .docx о моем документе. В свои документы я импортирую изображения из папки \images в каталоге моего проекта.

Обычно, когда я вяжу документ, я могу максимально увеличить его положение на странице. Кто-нибудь знает, как это сделать с помощью officedown? У меня нет проблем при запуске этого кода в RMarkdown

Вот что я получаю с помощью officedown Вот что я получаю

Это то, что я хочу (обратите внимание, что изображение занимает всю страницу) Вот что я хочу

Я включил представительство ниже

---
date: "`r Sys.Date()`"
author:
title: "GitHub Example"
output: 
  officedown::rdocx_document
---

```{r setup, include=FALSE, echo = FALSE}
pacman::p_load(readxl, dplyr, apastats, officedown, officer, ggplot2, knitr) # load packages

knitr::opts_chunk$set(fig.align = 'center',
                      fig.cap = TRUE,
                      fig.pos = 'H',
                      fig.path = 'images/',
                      echo = FALSE,
                      warning = FALSE, 
                      message = FALSE,
                      include = TRUE,
                      out.height="100%",  out.width="100%",
                      dpi = 300)

```

```{r}
# Creating a boxplot and saving it in \images directory
plot <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_boxplot()
ggsave("images/plot.png",plot, width=11, height=8.5, dpi=300)

```

## Figures 

Figure \@ref(fig:boxplot) shows a boxplot that is made within the RMarkdown document. 
I want to call in an image saved from a previous R scripts which is saved 
in my `\images` directory shown in Figure \@ref(fig:plot). But notice how it 
does not take up the whole page.

<!---BLOCK_LANDSCAPE_START--->
```{r fig.cap="A boxplot", fig.id = "boxplot"}
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_boxplot()
```
<!---BLOCK_LANDSCAPE_STOP--->


<!---BLOCK_LANDSCAPE_START--->

```{r fig.id="plot", fig.cap="boxplot imported from images folder", echo=FALSE}
knitr::include_graphics("images/plot.png")
``` 

<!---BLOCK_LANDSCAPE_STOP--->

person Patrick    schedule 08.07.2020    source источник


Ответы (3)


Советы по работе с графиками / рисунками в выводе Word:
a) вам необходимо использовать fig.height и / или fig.width для масштабирования графиков / фигур;
b) рассмотрите возможность использования параметра фрагмента crop = TRUE с функцией hook_pdfcrop() для обрезки / обрезайте лишнее белое поле вокруг участка (см. @CL. SO ответьте здесь);
c) параметры фрагментов : fig.align, fig.pos, out.height, out.width или out.extra не поддерживаются для вывода Word.

Для достижения желаемого результата вы можете рассмотреть следующие изменения:

```{r setup, include = FALSE, echo = FALSE}
pacman::p_load(readxl, dplyr, apastats, officedown, officer, ggplot2, knitr) # load packages

knitr::opts_chunk$set(fig.cap = TRUE,
                      fig.path = 'images/',
                      echo = FALSE,
                      warning = FALSE, 
                      message = FALSE,
                      include = TRUE,
                      dpi = 300)
```
```{r}
# Creating a boxplot and saving it in \images directory
plot <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_boxplot()
ggsave("images/plot.png", plot, dpi = 300)
```
```{r fig.id = "plot", fig.cap = "boxplot imported from images folder", fig.height = 6, fig.width = 7.5, echo = FALSE}
knitr::include_graphics("images/plot.png")
```

Это как-то помогает?

person Radovan Miletić    schedule 08.07.2020
comment
Это прекрасный и хороший совет. Полагаю, я просто искал что-то, что увеличивало бы размер изображения относительно страницы аналогично out.width и out.height. Большое спасибо за ваш ответ, это помогло заставить вещи работать - person Patrick; 09.07.2020
comment
fig.align поддерживается officedown - person David Gohel; 10.07.2020
comment
Спасибо, что сообщили мне, Дэвид. - person Radovan Miletić; 10.07.2020

Вы можете использовать knitr обычные параметры fig.width и fig.height (дюймы).


---
date: "`r Sys.Date()`"
author:
title: "GitHub Example"
output: 
  officedown::rdocx_document
---

```{r setup, include=FALSE, echo = FALSE}
pacman::p_load(readxl, dplyr, apastats, officedown, officer, ggplot2, knitr) # load packages

knitr::opts_chunk$set(fig.align = 'center',
                      echo = FALSE,
                      warning = FALSE, 
                      message = FALSE,
                      dpi = 300)

```

```{r}
plot <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_boxplot()
```



<!---BLOCK_LANDSCAPE_START--->
```{r fig.cap="A boxplot", fig.id = "boxplot"}
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_boxplot()
```

```{r fig.width=10, fig.height=5, fig.id="plot", fig.cap="boxplot imported from images folder", echo=FALSE}
plot
``` 

<!---BLOCK_LANDSCAPE_STOP--->

введите описание изображения здесь

person David Gohel    schedule 08.07.2020
comment
Спасибо Дэвиду Гохелю за ваш ответ! Мне очень нравится этот пакет. - person Patrick; 09.07.2020

После реализации @David Gohel ответит на несколько проектов. Я до сих пор завидую использованию out.height и out.width в выводах PDF.

В большинстве своих проектов я заходил в проводник, щелкал правой кнопкой мыши по фигуре, о которой идет речь, и записывал размеры изображения, чтобы вычислить его соотношение сторон. введите описание изображения здесь

В типичном officedown проекте я вызываю только fig.width, чтобы убедиться, что фигура максимизирована до размера страницы при сохранении исходного соотношения сторон.

knitr::include_graphics("images/plot.png")

Я работал над попыткой реализовать это автоматически, что потребовало бы чтения размеров изображений для установки fig.asp. Это не идеально, и я уверен, что у кого-то другой будет гораздо лучший и понятный подход, но вы можете сделать это с помощью пакета magick. Это также требует 2 куска для выполнения подвига (опять же не оптимально)

{r, eval=TRUE, echo=FALSE}
# First chunk to fetch the image size and calculate its aspect ratio
img <- magick::image_read("images/plot1.png") # read the image using the magic library

img.asp <- image_info(img)$height / image_info(img)$width # calculate the figures aspect ratio
{r fig.width=11, fig.asp = img.asp, fig.id="plot", fig.cap="boxplot imported from images folder", echo=FALSE}
# second chunk uses "img.asp" to make sure our aspect ratio is maintained.
knitr::include_graphics("images/plot.png")
person Patrick    schedule 26.02.2021