我正在用 R markdown 编写一份带有 pdf 输出的报告。我有几个图,我想在 2x2 矩阵中每页显示四个图。有没有办法让它们像那样显示并带有单独的字幕?
到目前为止,这是我尝试过的:
Package gridExtra - 我可以很容易地设置我想要的布局,但我无法为绘图添加标题。是否有一个选项可以在
grid.arrange
中为绘图添加标题>?将每个绘图放在不同的 block 中并使用 R block 选项。基本上是交替设置
out.width='.49\\linewidth'、fig.align='right'
和fig.align='left'
。在这里,我可以使用fig.cap
设置单独的标题,但图表总是显示在不同的页面上。我尝试使用
fig.width
和fig.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)
```
最佳答案
您可以在 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
```
编辑
为确保子图之间有空白,您可以添加 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/