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()
из сетки будет работать пакет, поэтому я попробовал:
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 ответа
Вы, вероятно, лучше проведете время, используя 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)
Вы также можете использовать функцию multiplot(), которая может быть настроена в соответствии с вашими потребностями: http://www.cookbook-r.com/Graphs/Multiple_graphs_on_one_page_(ggplot2)/
Если вы используете 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
```