Grid.layout в ggplot

Я использую следующий код для создания трех наборов графиков в удивительном пакете 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() из пакета grid будет работать, поэтому я попытался:

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 файл со всеми наборами цифр на одной странице (и без пустой страницы!)?

Ответ 1

Вероятно, вам лучше использовать 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

Ответ 3

Если вы используете 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
```