从.RMD中的代码块中删除空格(将knitr编译为Beamer pdf)

时间:2016-10-14 18:51:14

标签: r knitr r-markdown pandoc beamer

我正在R Markdown .Rmd文件中创建RStudio(版本0.99.903)上的幻灯片,输出设置为PDF(Beamer)。在几张幻灯片上,我想插入一个图表,无论是在文本下面还是单独在幻灯片上,代码产生的图表在屏幕上看不到。然而,尽管我尝试了很多东西,但是在文本的结尾和图形的开头之间总是有一个空格,大概是在没有设置echo = FALSE的情况下代码块会出现的地方。例如:

---
title: "Untitled"
author: "Math 35"
date: "October 14, 2016"
output: beamer_presentation
---

```{r setup, echo=FALSE, include=FALSE}
knitr::knit_hooks$set(mysize = function(before, options, envir) {
  if (before) 
    return(options$size)
})
knitr::opts_chunk$set(size='\\small')
knitr::opts_chunk$set(warning=FALSE)
knitr::opts_chunk$set(message=FALSE)
knitr::opts_chunk$set(fig.align='center')
```

## Recap from Last Time: Continuous Random Variables
-- Uniform Random Variable  $X\sim  U(a,b)$
$$f_X(x) = \frac{1}{b-a}, a \leq x \leq b$$
$$E[X] = \frac{a+b}{2}$$
$$Var(X) = \frac{(b-a)^2}{12}$$
```{r, echo=FALSE, fig.height=3, fig.width=3.5}
density <- dunif(x=seq(from=0, to=6, by=0.01), min=1, max=5)
plot(seq(from=0, to=6, by=0.01), density, col="black", type="l", ylim=c(0, 0.5), lwd=4,  xlab="X ~ U(1,5)")
  lines(c(3,3), c(0,dunif(3, min=1, max=5)), col="red", lwd=2)
  text(2.9, 0.1, "E[X]=(1+5)/2 = 3", col="purple")
```

当我在R Studio中“编织PDF”时,生成的幻灯片在文本和图形之间有一个很大的空白区域。结果,该图不适合幻灯片。我想删除这个空白区域,以便所有内容都适合幻灯片。

以下是我尝试过的所有代码块选项都没有用到:

  • results ='hide'通常会隐藏常规命令结果,但仍显示图形,但在这种情况下仍会留下空白。

  • strip.white = TRUE

  • 整齐= TRUE

  • fig.keep ='high'

  • fig.keep ='last'

  • highlight ='false'

我也看过:

  • http://yihui.name/knitr/demo/output/引用https://github.com/yihui/knitr/issues/231,但由于这解决了我不熟悉的.Rnw文件中的问题,我无法使该解决方案起作用。我尝试将建议的标题放在.Rmd文件的顶部但“Knit PDF”没有完成编译。我可能做错了。

  • 我查看了R Markdown参考指南,在那里我找到了我在上面尝试的各种选项。

我现在花了两个小时试图找出如何在一张幻灯片上正确显示一个数字。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

你可以玩par(),但部分问题来自乳胶方面。使用\begin{center}\end{center}环境可添加垂直空间。您可以尝试修改相关的knitr挂钩,或者只是手动添加居中指令,

\centering
```{r, echo=FALSE, fig.height=1.5, fig.width=3.5}
density <- dunif(x=seq(from=0, to=6, by=0.01), min=1, max=5)
par(mar=c(2.5,2.5,0.5,0.5), mgp=c(1.5, 0.5, 0), bg="grey95")
plot(seq(from=0, to=6, by=0.01), density, col="black", type="l", ylim=c(0, 0.5), lwd=4,  xlab="X ~ U(1,5)")
  lines(c(3,3), c(0,dunif(3, min=1, max=5)), col="red", lwd=2)
  text(2.9, 0.1, "E[X]=(1+5)/2 = 3", col="purple")
  ```

enter image description here

答案 1 :(得分:0)

感谢所有回复的人。我设置了代码块选项out.width='65%',它可以工作(同时更改y轴从0扩展到0.3而不是0到0.5):

---
title: "Lecture 5 - The Normal Distribution"
output:
  beamer_presentation: 
    highlight: null
---
```{r setup, echo=FALSE, include=FALSE}
knitr::knit_hooks$set(mysize = function(before, options, envir) {
  if (before) 
    return(options$size)
})
knitr::opts_chunk$set(size='\\small')
knitr::opts_chunk$set(echo=TRUE)
knitr::opts_chunk$set(warning=FALSE)
knitr::opts_chunk$set(message=FALSE)
knitr::opts_chunk$set(fig.align='center')
```
## Recap from Last Time: Continuous Random Variables
-- Uniform Random Variable  $X\sim  U(a,b)$
$$f_X(x) = \frac{1}{b-a}, a \leq x \leq b$$
$$E[X] = \frac{a+b}{2}$$
$$Var(X) = \frac{(b-a)^2}{12}$$

```{r, echo=FALSE,out.width='65%'}
density <- dunif(x=seq(from=0, to=6, by=0.01), min=1, max=5)
plot(seq(from=0, to=6, by=0.01), density, col="black", type="l", ylim=c(0, 0.3), lwd=4,  xlab="X ~ U(1,5)")
  lines(c(3,3), c(0,dunif(3, min=1, max=5)), col="red", lwd=2)
  text(2.9, 0.1, "E[X]=(1+5)/2 = 3", col="purple")
```