Rmarkdown:同一页面上的多个图表,带有单独的标题

时间:2018-04-18 18:55:05

标签: r-markdown gridextra

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

这是我到目前为止所尝试的内容:

  • 包gridExtra - 我可以轻松设置我想要的布局,但我无法在图中添加标题。是否有选项可以在grid.arrange中添加标题?< / p>

  • 将每个地块放置在不同的块中并使用R块选项进行播放。基本上设置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 我很感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:6)

您可以在LaTeX输出中使用子图,如描述here。如果您有很多图并且想要更容易地提供字幕,您可以在块之前在列表中指定这些(即captions <- c("Caption 1", "Caption 2")并将此列表提供给块fig.subcap=captions

---
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