Knitr не отображает график, когда установлен out.width или out.height - PullRequest
0 голосов
/ 24 июня 2018

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

Я пытаюсь набрать .Rmd отчет об исследовании в формате PDF, используя knitr.Я хотел бы включить график, созданный в ggplot.

Если я включу параметры блока out.width или out.height, график не будет представлен в выходном PDF-документе.

Вот MWE:

1) создание данных:

datas <- data.frame(x = rep(1:30), y = rep(40:69))
save(datas, file = 'datas.RData')

2) Основной файл - file.Rmd:

---
author: "NN"
title: "Title"
fontsize: 14pt
geometry: margin=2cm
output: pdf_document
header-includes: |
    \usepackage{caption}
    \usepackage{bookman}
    \usepackage{multirow}
    \usepackage{array}
    \usepackage[htt]{hyphenat}
    \usepackage{booktabs}
    \usepackage{longtable}
    \usepackage[table]{xcolor}
    \usepackage{wrapfig}
    \usepackage{float}
    \usepackage{colortbl}
    \usepackage{pdflscape}
    \usepackage{tabu}
    \usepackage{threeparttable}
    \usepackage{threeparttablex}
    \usepackage[normalem]{ulem}
    \usepackage{makecell}
    \captionsetup[table]{width=\textwidth}
    \renewcommand{\tablename}{Tablica}
    \renewcommand{\figurename}{Slika}
---
```{r setup, echo = F, include = F}
library(knitr)
library(kableExtra)
# knitr setup
opts_chunk$set(prompt = T, background = '#E5E8E8', dpi = 600, fig.width = 12, dev = 'pdf')
options(digits = 3)

# packages
library(tidyverse)
library(data.table)
library(wrapr)
library(readxl)
library(magrittr)
library(psych)
library(ggpubr)

# loading the data
load('datas.RData')
```
sample text

```{r desk_stat, child = 'file_d.Rmd'}
```

3) Подфайл (тот, который содержит график) - file_d.Rmd:

```{r, fig.cap = '\\label{bar-znanje-visina}Some label.', cache = T, out.width = '.49\\linewidth'}
ggplot(datas,
       aes(x = x)) +
    geom_bar()
```

Если я наберу его с этими параметрами, изображение в файле .md будет включено с:

<embed src="figure/unnamed-chunk-1-1.pdf" title="\label{bar-znanje-visina}Some label." alt="\label{bar-znanje-visina}Some label." width=".49\linewidth" type="application/pdf" />

Anвыходной pdf выглядит следующим образом:

output with out.width

Если я набрал вывод без параметра out.width, изображение в файле .md будет включено с:

![\label{bar-znanje-visina}Some label.](figure/unnamed-chunk-1-1.pdf)

И вывод pdf выглядит следующим образом:

output without out.width

Я вяжу файл .Rmd с

Rscript -e 'library(knitr); opts_knit$set(out.format = "latex"); knit("file.Rmd")'

Информация о сеансе:

R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Manjaro Linux

Matrix products: default
BLAS: /usr/local/lib64/R/lib/libRblas.so
LAPACK: /usr/local/lib64/R/lib/libRlapack.so

locale:
 [1] LC_CTYPE=en_US.utf8        LC_NUMERIC=C              
 [3] LC_TIME=hr_HR.UTF-8        LC_COLLATE=en_US.utf8     
 [5] LC_MONETARY=hr_HR.UTF-8    LC_MESSAGES=en_US.utf8    
 [7] LC_PAPER=hr_HR.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=hr_HR.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] kableExtra_0.9.0 knitr_1.20       nvimcom_0.9-72  

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.16      rstudioapi_0.7    xml2_1.2.0        magrittr_1.5     
 [5] hms_0.4.2         rvest_0.3.2       munsell_0.4.3     viridisLite_0.3.0
 [9] colorspace_1.3-2  R6_2.2.2          rlang_0.2.0       plyr_1.8.4       
[13] stringr_1.3.0     httr_1.3.1        tools_3.4.3       htmltools_0.3.6  
[17] rprojroot_1.3-2   digest_0.6.15     tibble_1.4.2      readr_1.1.1      
[21] evaluate_0.10.1   rmarkdown_1.9     stringi_1.1.7     compiler_3.4.3   
[25] pillar_1.2.1      scales_0.5.0      backports_1.1.2   pkgconfig_2.0.1  

РЕДАКТИРОВАТЬ: Обновление

Я попытался набрать минимальный .Rnw пример Yihui , и он работает просто отлично.Я также попытался изменить его так, чтобы он отображал график из MWE, и он также работает.Я также заметил, что установка keep_tex = true ничего не делает при компиляции файла .Rmd.Файл tex не создан.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вместо использования knitr::knit() проще использовать rmarkdown::render(). Вы можете позвонить напрямую

Rscript -e 'rmarkdown::render("file.Rmd")'

или косвенно с помощью примера сценария из пакета littler

render.r file.Rmd

в командной строке.

0 голосов
/ 25 июня 2018

Если вы всегда привязаны к PDF, вы можете попробовать установить out.width = '49%' в настройках блока кода.Вместо этого вы можете попробовать изменить настройку fig.width = в блоке кода, которая принимает размер ширины рисунка в дюймах.Если все это не работает, я бы также взглянул на функцию grid.arrange() из пакета gridExtra

Также ваша проблема не воспроизводима.Когда я запускаю ваш код на моей машине с Win10, я получаю следующий вывод.

reproduced_example

...