Подтвердить что ты не робот

Плохое разрешение в knitr с использованием Rmd

У меня есть .Rmd файл, и я пытаюсь создать файл .docx через функцию pandoc.

Я хочу иметь цифру с окончательным разрешением 504x504 пикселей (т.е. 7x7 дюймов с 72dpi). К сожалению, по умолчанию 72 dpi слишком низкое по качеству, и я хотел бы увеличить его до, скажем, 150 dpi без изменения окончательного разрешения (поэтому он уже будет иметь правильный размер в файле .docx). Если я сохраняю опции fig.width и fig.height = 7 и задаю dpi = 150, я получаю качество, которое я хочу, но окончательное разрешение увеличивается, а фигура удаляется вне полей .docx. Я пробовал играть с аргументами out.width и out.height, но когда я включаю те, он просто ничего не замышляет в финальном .docx.

Идеи?

Пример. Код Rmd:

My title
-------------------------

*(this report was produced on: `r as.character(Sys.Date())`)*  

That my plot

```{r echo=FALSE}
    plot(0,0,type="n",xlim=c(0,500), ylim=c(-12,0), las=1)
    color  <-  rainbow(500)
    text(380,-1,"Test",pos=4)
    lseq   <-  seq(-6,-2,length.out=500)
    for(j in seq_along(lseq)) {
        lines(c(400,450), rep(lseq[j], 2), col=color[j])
    }
    polygon(c(400,450,450,400), c(-6,-6,-2,-2), lwd=1.2)
```

Преобразование в .docx

library(knitr)
library(markdown)
knit("example.Rmd")  # produces the md file
pandoc("example.md", format = "docx") #prodces the .docx file

Если я попытаюсь перемасштабировать фигуру, она просто не работает. Внизу:

My title
-------------------------

*(this report was produced on: `r as.character(Sys.Date())`)*  

That my plot

```{r echo=FALSE, dpi=150, fig.width=7, fig.height=7, out.width=504, out.height=504}
    plot(0,0,type="n",xlim=c(0,500), ylim=c(-12,0), las=1)
    color  <-  rainbow(500)
    text(380,-1,"Test",pos=4)
    lseq   <-  seq(-6,-2,length.out=500)
    for(j in seq_along(lseq)) {
        lines(c(400,450), rep(lseq[j], 2), col=color[j])
    }
    polygon(c(400,450,450,400), c(-6,-6,-2,-2), lwd=1.2)
```
4b9b3361

Ответ 1

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

Итак, установка dpi=300 (потому что dpi=150 не произвела достаточно очевидной разницы) в параметрах chunk, произвела гораздо более качественное изображение без изменения физического размера изображений в Word.

```{r, echo=FALSE, dpi=300, fig.width=7, fig.height=7}
plot(0,0,type="n",xlim=c(0,500), ylim=c(-12,0), las=1)
color  <-  rainbow(500)
text(380,-1,"Test",pos=4)
lseq   <-  seq(-6,-2,length.out=500)
for(j in seq_along(lseq)) {
    lines(c(400,450), rep(lseq[j], 2), col=color[j])
}
polygon(c(400,450,450,400), c(-6,-6,-2,-2), lwd=1.2)
```

Однако установка out.width и out.height полностью удаляет создание изображения с предупреждением "fig.align, out.width, out.height, out.extra не поддерживаются для вывода Word".

Ответ 2

Это прекрасное время, чтобы воспользоваться встроенными функциями динамической настройки knitr для типов вывода. Они были протестированы с обоими целевыми показателями...

````{r img-setup, include=FALSE, cache=FALSE}
out.format <- knitr::opts_knit$get("out.format")
img_template <- switch( out.format,
                     word = list("img-params"=list(fig.width=6,
                                                   fig.height=6,
                                                   dpi=150)),
                     {
                       # default
                       list("img-params"=list( dpi=150,
                                               fig.width=6,
                                               fig.height=6,
                                               out.width="504px",
                                               out.height="504px"))
                     } )

knitr::opts_template$set( img_template )
````

Если вы не хотите использовать img_template для каждого созданного изображения, вы можете либо не вызывать функцию set, а вместо этого добавить opts.label="img_template" к параметрам кусков, с которыми вы хотите использовать, или переопределить img_template, указав params явно для куска.