r-markdown - Rmarkdown : Multiple plots on same page with separate captions

标签 r-markdown gridextra

我正在用 R markdown 编写一份带有 pdf 输出的报告。我有几个图,我想在 2x2 矩阵中每页显示四个图。有没有办法让它们像那样显示并带有单独的字幕?

到目前为止,这是我尝试过的:

  • Package gridExtra - 我可以很容易地设置我想要的布局,但我无法为绘图添加标题。是否有一个选项可以在 grid.arrange 中为绘图添加标题>?

  • 将每个绘图放在不同的 block 中并使用 R block 选项。基本上是交替设置 out.width='.49\\linewidth'、fig.align='right'fig.align='left'。在这里,我可以使用 fig.cap 设置单独的标题,但图表总是显示在不同的页面上。

  • 我尝试使用 fig.widthfig.height 选项,并且能够让它们显示在同一页面的各自左侧或页面右侧。然而,标题总是占据整个页面宽度并保持在中心而不是用绘图大小包裹。有没有办法让标题遵循绘图大小规则?

这是一个示例代码:

```{r, echo=FALSE, cache=FALSE, results=FALSE, warning=FALSE,  comment=FALSE, message= FALSE, eval =T, fig.height= 9}

p1<- ggplot(mpg, aes(displ, hwy, colour = class)) + 
geom_point()+
labs(caption = "Lorem ipsum dolor sit amet, consectetur adipiscing     elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ")+
theme(plot.caption = element_text(hjust = 0.5))

p2<- ggplot(mpg, aes(displ, hwy, colour = class)) + 
geom_point()+
labs(caption = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.  ")+
theme(plot.caption = element_text(hjust = 0.5))

p3<- ggplot(mpg, aes(displ, hwy, colour = class)) + 
geom_point()+
labs(caption = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ")+
theme(plot.caption = element_text(hjust = 0.5))

p4<- ggplot(mpg, aes(displ, hwy, colour = class)) + 
geom_point()+
labs(caption = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. ")+
theme(plot.caption = element_text(hjust = 0.5))

library(gridExtra)
grid.arrange(p1,p2,p3,p4)
```

Here is the output image 我将不胜感激任何帮助。谢谢!

最佳答案

您可以在 LaTeX 输出中使用子图,如描述 here .如果您有很多图并且想更轻松地提供标题,则可以在 block 之前的列表(即 captions <- c("Caption 1", "Caption 2" )中指定这些,并将此列表作为 fig.subcap=captions 提供给 block

---
output: pdf_document
header-includes:
  - \usepackage{subfig}
---  

```{r}
captions <- c("Caption 1",
              "Caption 2", 
              "Caption 3",
              "Caption 4: a very very very very very very very very very long one")
```


```{r, echo=FALSE, cache=FALSE, results=FALSE, warning=FALSE,  comment=FALSE, message= FALSE, eval =T,  fig.cap = "Overall Caption", fig.subcap=captions, out.width='.49\\linewidth', fig.asp=1, fig.ncol = 2}
library(ggplot2)
p1<- ggplot(mpg, aes(displ, hwy, colour = class)) + 
geom_point()+
theme(plot.caption = element_text(hjust = 0.5))

p2<- ggplot(mpg, aes(displ, hwy, colour = class)) + 
geom_point()+
theme(plot.caption = element_text(hjust = 0.5))

p3<- ggplot(mpg, aes(displ, hwy, colour = class)) + 
geom_point()+
theme(plot.caption = element_text(hjust = 0.5))

p4<- ggplot(mpg, aes(displ, hwy, colour = class)) + 
geom_point()+
theme(plot.caption = element_text(hjust = 0.5))

p1
p2
p3
p4
```

enter image description here

编辑

为确保子图之间有空白,您可以添加 margins加载包时的选项:

  - \usepackage[margin = 8pt]{subfig}

查看包文档中的其他选项:http://anorien.csc.warwick.ac.uk/mirrors/CTAN/macros/latex/contrib/subfig/subfig.pdf

关于r-markdown - Rmarkdown : Multiple plots on same page with separate captions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49907075/

相关文章:

R -Markdown for { } 大括号

r - 在 RMarkdown 中更改 R 输出的大小

r - 我应该如何在 Rmarkdown 中打印数据框中的分数?

r - 在 R 中组合 tableGrob 和 ggplot 对象时改变填充

r - 使用 gridExtra 排列许多图

html - 使滚动条出现在 RMarkdown 代码块中(html View )

r - 如何使非常宽的 grid.table 或 tableGrob 适合 pdf 页面?

grid - 使用 grid.arrange 为使用 gridExtra::grid.arrange 制作的多个图添加标题

r - 使用 rmarkdown 渲染时更改 R ggplot gganimate 的速度