【问题标题】:Rmarkdown: Multiple plots on same page with separate captionsRmarkdown:同一页面上的多个图,带有单独的标题
【发布时间】:2018-04-18 18:55:05
【问题描述】:

我写中的R与降价一个pdf输出的报告。我有几个情节,我想每个网页上显示四个图在一个2x2矩阵布局。有没有一种方法,让他们像显示与独立的字幕? P>

这是我迄今为止尝试过的:

  • 包gridExtra - ?我可以很容易地设置布局我想,但我没能字幕添加到plots.Is有一个选项,以字幕添加到grid.arrange P>剧情

  • 放置各小区在不同的块和有R块选择播放。基本上设置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)
```

我会很感激任何帮助。谢谢!

【问题讨论】:

  • 在每个ggplot的端部可以加字幕这样然后使用gridExtra - labs(caption = "Hi world") 跨度>
  • 谢谢,我试过了刚才。它的工作原理除了所有字幕都在彼此的顶部。有没有一种方法,以整齐地包裹积下的字幕? SPAN>
  • 您可以分享您的代码/数据,所以我可以看到这个问题? SPAN>
  • 如果你只是试图总结在标题中的文本,你可以做到这一点labs(caption = "Hi \nworld")。成\ n将把世界上第二行跨度>
  • 如果你只想PDF输出,你可以检查出使用sibfigure stackoverflow.com/a/49086985/7347699的 SPAN>

标签: r-markdown gridextra


【解决方案1】:

您可以在 LaTeX 输出中使用子图,如 here 所述。如果您有很多情节并且想要更轻松地提供字幕,您可以在块之前的列表中指定这些(即captions &lt;- 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
```

编辑

为确保子图之间有边距,您可以在加载包时添加margins选项:

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

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

【讨论】:

  • 实际上,我的一些字幕很长,它们并没有完全重叠,但它们接触并且有点难以阅读。是否可以在字幕之间添加空格?
  • 是的,我确实尝试过,但它在不改变标题宽度的情况下使所有四个图都变小了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
  • 2017-03-10
  • 1970-01-01
相关资源
最近更新 更多