Как удалить пробел выше и ниже изображения в R Markdown?

Я хочу экспортировать файл .Rmd в основном в виде латекса pdf.

Это код, который я сейчас использую

```{r ,fig.cap="caption",fig.env='figure', fig.width=10, fig.height=10,echo=FALSE, results='asis', warning=FALSE, strip.white=TRUE}
library(png)
library(grid)
img <- readPNG("filepath/overview.png")
grid.raster(img)
```

Как вы можете видеть, я уже использую strip.white=TRUE и fig.env='figure', но они, похоже, не работают. Файл .PNG не имеет (белого) интервала выше или ниже изображения.

Я знаю, что могу напрямую использовать латекс и добиваться того, чего хочу, но хочу, чтобы это можно было воспроизвести в Word, если это необходимо. Кроме того, в Word есть полстраничное пустое пространство над и под изображением.

Любая помощь будет принята с благодарностью. Благодаря

Ответы

Ответ 1

Ваша проблема не связана с knitr, а с растровым изображением, которое создает белый край, чтобы он не искажался. Например, если вы наберете ? graphics::plot.raster, вы увидите аргумент asp, установленный в 1, чтобы сохранить коэффициент из растра. Зарисуйте изображение в стандартном выводе R, вы увидите пустые части, если вы приспособите окно, эти белые части будут удалены. Итак, вам нужно проверить размеры изображения, а затем использовать коэффициент fig.asp в knitr для создания рамки, которая позволит вашему изображению соответствовать.

Проверьте коэффициент изображения

Пример использования magick

url <- "https://cdn.pixabay.com/photo/2017/11/15/20/27/diamonds-2952447_960_720.png"
image<- image_read(url)
print(image) 

это возвращает

  format width height colorspace filesize
1    PNG   960    600       sRGB   762423

Вы также можете использовать readPNG()

curl::curl_download(url, "image.png")
image <- png::readPNG("image.png",info=TRUE)
attr(image,"info")

Из knitr options мы имеем параметр fig.asp

fig.asp: (NULL; числовое) соотношение сторон графика, то есть отношение высоты/ширины; когда указано fig.asp, высота участка ( chunk option fig.height) рассчитывается из fig.width * fig.asp

Итак, здесь мы вычисляем height/width= 0,62.

Использование выхода knitr и docx

Здесь я использую квадратный вывод, переданный как аргумент opts.label, заданный в первом фрагменте, это усилит проблему, когда изображение будет широким.

--- 
title: "Crop image ?" 
output: word_document
--- 

```{r echo=FALSE}
require(knitr)
library(magick)
opts_template$set(squarefigure = list(fig.height = 6, fig.width = 6))
```
=lorem()
```{r opts.label ="squarefigure", echo=FALSE, fig.cap = "plot without setting the right raster output size"}
url <- "https://cdn.pixabay.com/photo/2017/11/15/20/27/diamonds-2952447_960_720.png"
img <- image_read(url)
img%>%grid.raster()
```
=lorem()

```{r  opts.label ="squarefigure", fig.cap = "plot with correct margin, square size", fig.asp=0.62}
img%>%grid.raster()
```
=lorem()

Как вы можете видеть, первое изображение имеет пустой край, а второй - правильно.

docx output

Использование LATEX с обрезкой

Я знаю, что ответ на LATEX не задавался в вопросе, но если некоторые читатели  используют knitr или sweave для получения выходного сигнала LATEX, тогда показывает, как обрезать изображение в книжке. Используемые аргументы trim={<left> <lower> <right> <upper>, и единица может быть cm мм в... (одна из LATEX единица для длины). Чтобы передать эти аргументы, вы можете использовать аргумент out.extra в параметрах chunk. Обратите внимание, что использование аргумента fig.asp для вашего изображения, подобного приведенному выше, также будет работать.

\documentclass{article}
\usepackage{graphicx}
\usepackage[english]{babel}
\usepackage{blindtext}
\begin{document}
\blindtext

<<r1, echo=FALSE >>=
library(knitr)    
library(ggplot2)
library(magick)
# download image to disk
url <- "https://cdn.pixabay.com/photo/2017/11/15/20/27/diamonds-2952447_960_720.png"
curl::curl_download(url, "image.png")
img <- image_read(png::readPNG("image.png"))
plot(img)
@

\blindtext
\newpage
\blindtext
<<r2, echo=FALSE,out.extra='trim={0 5cm 0 5cm},clip' >>=
plot(img)
@
\blindtext

\end{document}

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

Использование HTML

Здесь - отличный блог и для понимания таких аргументов, как fig.retina и out.width


Наконец, аргумент strip.white должен удалить пустые строки кода. Он не будет изменять размер вашего изображения.

strip.white: (ИСТИНА, логично), следует ли удалять белые линии в начало или конец исходного фрагмента на выходе