ggplot中的grid.layout

时间:2012-01-17 17:40:32

标签: r ggplot2

我正在使用以下代码在惊人的包ggplot2中创建三组图:

w<-rnorm(100)
x<-rnorm(100)
y<-rnorm(100)
z<-rnorm(100)
g<-rep(factor(LETTERS[1:4]), 25)
d<-data.frame(g,w,x,y,z)

library(ggplot2)

pw<-ggplot(d, aes(w, y))
px<-ggplot(d, aes(x, y))
pz<-ggplot(d, aes(z, y))

pw+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm')
px+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm')
pz+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm')

我会制作一个PDF文件,其中这三组图中的每一组都打印在同一页面上。我的理解是split.screen(c(3,1))par(mfrow=c(3,1))不适用于ggplot2图形,但网格包中的grid.layout()会起作用,所以我尝试了:

pdf(file="test.pdf")
pushViewport(viewport(layout=grid.layout(3,1)))
print(pw+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm'))
print(px+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm'))
print(pz+geom_point()+facet_grid(.~g, scales='fixed')+coord_equal()+stat_smooth(method='lm'))
dev.off()

但这最终是一个四页的PDF文件,第一页是空白的,每组数字在每页一页后面,x轴标签在底部向下。有没有办法在同一页面上制作包含所有图形集的PDF文件(并且没有空白页面引导!)?

3 个答案:

答案 0 :(得分:20)

grid.arrange()包中使用gridExtra可能会有更好的时间:

p1 <- pw + geom_point() + facet_grid(.~g, scales='fixed') + coord_equal() +   
      stat_smooth(method='lm')
p2 <- px + geom_point() + facet_grid(.~g, scales='fixed') + coord_equal() + 
      stat_smooth(method='lm')
p3 <- pz + geom_point() + facet_grid(.~g, scales='fixed') + coord_equal() +   
      stat_smooth(method='lm')

grid.arrange(p1, p2, p3, ncol=1)

enter image description here

答案 1 :(得分:2)

您还可以使用multiplot()函数,该函数可以自定义以满足您的需求:http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/

答案 2 :(得分:1)

如果您使用markdown,请在每个代码块中使用fig.height

```{r pw, fig.height = 2.66, echo = F}
pw
```
```{r px, fig.height = 2.66, echo = F}
px
```
```{r pz, fig.height = 2.66, echo = F}
pz
```