【问题标题】:R Markdown: plots within a loop going out of margin when typesetting to PDFR Markdown:排版为PDF时,循环内的绘图超出边距
【发布时间】:2016-08-30 00:55:25
【问题描述】:

在将 R Markdown 文档排版为 PDF 时,如果函数绘制多个绘图,这些绘图通常会并排显示,只有第一个绘​​图完全位于页面边缘。

最小 R Markdown 示例:

---
title: "Example re plotting problem"
author: "Daniel E. Weeks"
date: "May 3, 2016"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Multiple plots within a loop


```{r}
plots <- function() {
  plot(rnorm(100))
  hist(rnorm(100))
}

for (i in 1:3) {
 plots()
}
```

这是生成的PDF第2页的截图

这表明了问题。我在网上搜索过,但还没有找到解决这个问题的方法。

谢谢。


user2554330 提出的剧情钩子解决方案简单,效果不错。因此,此代码在生成的 PDF 的边缘内绘制所有图:

---
title: "Example re plotting problem"
author: "Daniel E. Weeks"
date: "May 3, 2016"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## Multiple plots within a loop


```{r}
plots <- function() {
  plot(rnorm(100))
  hist(rnorm(100))
}
```

## Call plotting function

```{r}
my_plot_hook <- function(x, options)
 paste("\n", knitr::hook_plot_tex(x, options), "\n")
 knitr::knit_hooks$set(plot = my_plot_hook)
for (i in 1:3) {
plots()
}
```

【问题讨论】:

  • 您可以使用layout 函数来定位绘图。 par 也有许多参数可以帮助操纵绘图区域、边距等。
  • 您还可以在每个块中设置选项。 fig.width = fig.height = 是我用来调整绘图的东西。
  • 感谢您的建议,但我的问题是关于如何解决这个问题,正如上面的最小示例所示,R Markdown 没有在生成的 PDF。所需的输出是以“正常”宽度和高度结束文档边缘内的所有绘图。请注意,在使用其他人的绘图功能时也会出现此问题(其中一个人没有简单的方法来修改绘图功能)。

标签: r pdf plot markdown knitr


【解决方案1】:

问题是生成的 .tex 文件在 \includegraphics{} 调用之间没有空格。 LaTeX 会发出关于 hbox 过满的警告,因为图形不够大,不能单独放在一行上,而且当它在每行上放两个时又太大了。

你可以告诉 LaTeX(真的是 TeX)输出坏行,而不用在每行添加两个数字

\pretolerance=10000

在代码块之前的文本中。您可能希望将其设置回默认值

\pretolerance=100

在代码块之后,否则 LaTeX 之后不会尝试连字符,文本看起来真的很难看。

解决此问题的另一种方法是强制每个图形位于其自己的段落中。您可以通过添加此代码来做到这一点

my_plot_hook <- function(x, options)
  paste("\n", knitr::hook_plot_tex(x, options), "\n")
knitr::knit_hooks$set(plot = my_plot_hook)

在您进行绘图之前放入代码块。这会放一个空行 每个数字之前和之后。

【讨论】:

  • 谢谢 - 我喜欢 'my_plot_hook' 解决方案,它简单且效果很好。
  • 添加my_plot_hook 函数非常有用。感谢您指出。
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 2017-11-22
  • 2017-02-09
  • 1970-01-01
  • 2018-10-08
  • 2018-09-26
相关资源
最近更新 更多