2013-09-19 6 views
21

У меня есть .Rmd-файл, и я пытаюсь создать файл .docx с помощью функции pandoc.Плохое разрешение в knitr с использованием Rmd

Я хочу иметь фигуру с окончательным разрешением 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's 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's 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) 
``` 
+0

возможно http://stackoverflow.com/questions/14829791/figure-sizes-with-pandoc-conversion-from-markodown-to-docx обеспечит вдохновение – mnel

+0

Когда я сохраняю файлы png, я использую что-то вроде: 'ppi = 300; png ("mygraph.png", width = 6 * ppi, height = 6 * ppi, res = ppi) ' – csgillespie

+3

@csgillespie, что эквивалентно' fig.width = 6, fig.height = 6, dpi = 300'. в 'knitr' –

ответ

8

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

````{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 для каждого изображения, полученного вы можете не вызывать функцию набора и вместо того, чтобы добавить opts.label="img_template" к Params из кусков вы хотите использовать его или переопределить img_template, явно указав параметры для куска.

10

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

Итак, установка dpi=300 (потому что dpi=150 не произвела достаточно очевидной разницы) в параметрах куска, произвела изображение более высокого качества без изменения физического размера изображений в 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,".

Смежные вопросы