Пакет grid содержит низкоуровневые функции для создания графических объектов (grobs) и позиционирования их на странице в заданных ракурсах. Пакет gtable предоставляет высокоуровневую схему разметки, более подходящую для пользователей. Пакет gridExtra с помощью пары функций arrangeGrob/grid.arrange() предоставляет возможности для размещения нескольких графических объектов на странице.
Базовая функциональность
В этом примере мы смешиваем несколько графических объектов и диаграмм.
> library(gridExtra)
> library(grid)
> library(ggplot2)
> library(lattice)
> p <- qplot(1,1)
> p2 <- xyplot(1~1)
> r <- rectGrob(gp=gpar(fill="grey90"))
> t <- textGrob("text")
> grid.arrange(t, p, p2, r, ncol=2)
> library(grid)
> library(ggplot2)
> library(lattice)
> p <- qplot(1,1)
> p2 <- xyplot(1~1)
> r <- rectGrob(gp=gpar(fill="grey90"))
> t <- textGrob("text")
> grid.arrange(t, p, p2, r, ncol=2)
Заголовок и подписи
> gs <- lapply(1:9, function(ii)
grobTree(rectGrob(gp=gpar(fill=ii, alpha=0.5)), textGrob(ii)))
> grid.arrange(grobs=gs, ncol=4,
top="top label", bottom="bottom\nlabel",
left="left label", right="right label")
> grid.rect(gp=gpar(fill=NA))
grobTree(rectGrob(gp=gpar(fill=ii, alpha=0.5)), textGrob(ii)))
> grid.arrange(grobs=gs, ncol=4,
top="top label", bottom="bottom\nlabel",
left="left label", right="right label")
> grid.rect(gp=gpar(fill=NA))
Сложные разметки
Мы можем задать разметку в виде матрицы.
> lay <- rbind(c(1,1,1,2,3), c(1,1,1,4,5), c(6,7,8,9,9))
> grid.arrange(grobs = gs, layout_matrix = lay)
> grid.arrange(grobs = gs, layout_matrix = lay)
Все ячейки по умолчанию имеют одинаковый размер, но пользователи могут произвольно менять их размер.
> grid.arrange(grobs=gs[1:3], ncol=2, widths = 1:2, heights=unit(c(1,10), c("in", "mm")))
Вложенные разметки с arrangeGrob
Функция grid.arrange() размещает графические объекты на странице. Для более сложных разметок мы можем хранить gtable и комбинировать ее с другими объектами, то есть формировать вложенные разметки. Для этого используется arrangeGrob().
> g1 <- arrangeGrob(grobs = gs, layout_matrix = t(lay))
> g2 <- arrangeGrob(grobs = gs, layout_matrix = lay)
> grid.arrange(g1, g2, ncol=2)
> g2 <- arrangeGrob(grobs = gs, layout_matrix = lay)
> grid.arrange(g1, g2, ncol=2)
Многостраничный вывод
Кроме всего прочего, мы мы можем размещать графические объекты на нескольких страницах; функция marrangeGrob() предоставляет удобный интерфейс для этого, а также она совместима с ggsave().
> set.seed(123)
> pl <- lapply(1:11, function(.x) qplot(1:10, rnorm(10), main=paste("plot", .x)))
> ml <- marrangeGrob(pl, nrow=2, ncol=2)
> pl <- lapply(1:11, function(.x) qplot(1:10, rnorm(10), main=paste("plot", .x)))
> ml <- marrangeGrob(pl, nrow=2, ncol=2)
## неинтерактивный режим, вывод в многостраничный pdf
## ggsave("multipage.pdf", ml)
## интерактивный режим; вызываем `dev.new` несколько раз
> ml
> ml
Комментариев нет:
Отправить комментарий