设置 out.width 或 out.height 时 Knitr 不显示图形

Knitr not displaying graph when out.width or out.height set

我已经 post 编辑了这个问题,但它缺少 MWE,所以我决定删除旧问题并 post 一个新问题,因为旧问题必须几乎完全重写。

我正在尝试使用 knitr 将一份 .Rmd 研究报告排版为 pdf。我想包括在 ggplot.

中创建的图表

如果我包含 out.widthout.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) Sub-file(包含情节的那个)- 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" />

输出的 pdf 如下所示:

如果我在没有 out.width 选项的情况下排版输出,.md 文件中的图像包含在:

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

输出的 pdf 如下所示:

我正在编写 .Rmd 文件

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

Session 信息:

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  

编辑:更新

我试过排版一辉的极简.Rnwexample,效果还不错。我还尝试修改它,以便它显示来自 MWE 的图形,并且它也可以工作。我还注意到在编译 .Rmd 文件时设置 keep_tex = true 没有任何作用。未创建 tex 文件。

如果您总是编写 pdf,您可以尝试在代码块设置中设置 out.width = '49%'。您也可以尝试调整代码块中的 fig.width = 设置,它采用以英寸为单位的图形宽度大小。如果所有这些都不起作用,我也会 take a look 在 gridExtra 包

grid.arrange() 函数

另外你的问题是不可重现的。当我 运行 你的代码在我的 Win10 机器上时,我得到以下输出。

而不是使用 knitr::knit(),使用 rmarkdown::render() 更容易。你可以直接调用它

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

或间接使用 littler 包中的示例脚本

render.r file.Rmd

在命令行上。