控制由R markdown中的ggplot循环生成的每个pdf页面的图形的大小和数量

时间:2014-07-08 17:27:09

标签: r ggplot2 knitr pandoc gridextra

我想使用R markdown生成一个pdf文档,以显示在 for 循环中使用ggplot创建的一系列绘图。是否可以控制每页上的绘图数量,例如,每页有2 X 2的绘图网格?

我希望保持灵活性,这样我就可以更改图表的总数,以便在适当数量的页面上进行分割。

我使用ggplot2和gridExtra包的尝试如下,但我无法控制每页的图形数量,似乎只想将它们压缩到一个sinlge页面。我已经尝试在grid.arrange中更改ncol,nrow,height,width参数但它似乎没有帮助。

    ---
    title: "ggplot Layout"
output: pdf_document
    ---

    ```{r,figure2 fig.height=8, fig.width=6,echo=FALSE,message=FALSE}


    library(ggplot2)
    library(gridExtra) 

    graphlist<-list()
    count <- 1
    colnums<-c(1,5,6,7,8,9,10)

    for (i in colnums) {
    plot.x.name<-names(diamonds[i])
    p <- ggplot(data=diamonds,aes_string(x = plot.x.name)) + geom_histogram() 
    graphlist[[count]]<-p
    count <- count+1

    }

    do.call("grid.arrange",c(graphlist,ncol=2))



    ```

这个代码证明了我正在寻找的东西(改编自 http://kbroman.github.io/knitr_knutshell/pages/figs_tables.html),但不幸的是,这不适用于ggplot。

---
title: "Example Layout"
output: pdf_document
---


```{r bunch_o_figs,fig.height=8, fig.width=6, message=FALSE,echo=FALSE}
n <- 100
x <- rnorm(n)
par(mfrow=c(2,2), las=1)
for(i in 1:20) {
  y <- i*x + rnorm(n)
  plot(x, y, main=i)
}
``

1 个答案:

答案 0 :(得分:6)

您可以尝试marrangeGrob

---
title: "ggplot Layout"
output: pdf_document
---

```{r figure2 , fig.height=8, fig.width=6,echo=FALSE,message=FALSE}


    library(ggplot2)
    library(gridExtra) 

    graphlist <- replicate(10, qplot(1,1), simplify = FALSE)

    do.call("marrangeGrob",c(graphlist,ncol=2,nrow=2))
```