设置 out.width 或 out.height 时 Knitr 不显示图形
Knitr not displaying graph when out.width or out.height set
我已经 post 编辑了这个问题,但它缺少 MWE,所以我决定删除旧问题并 post 一个新问题,因为旧问题必须几乎完全重写。
我正在尝试使用 knitr
将一份 .Rmd
研究报告排版为 pdf。我想包括在 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) 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
文件中的图像包含在:

输出的 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
编辑:更新
我试过排版一辉的极简.Rnw
example,效果还不错。我还尝试修改它,以便它显示来自 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
在命令行上。
我已经 post 编辑了这个问题,但它缺少 MWE,所以我决定删除旧问题并 post 一个新问题,因为旧问题必须几乎完全重写。
我正在尝试使用 knitr
将一份 .Rmd
研究报告排版为 pdf。我想包括在 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) 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
文件中的图像包含在:

输出的 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
编辑:更新
我试过排版一辉的极简.Rnw
example,效果还不错。我还尝试修改它,以便它显示来自 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
在命令行上。