Достаточно часто возникает необходимость аккуратно разместить несколько графиков рядом, скомпоновав из них целостное изображение. В случае однотипных графиков можно использовать функцию facet_grid() из пакета ggplot2 либо аналогичные возможности пакета lattice. Если нужно разместить на одной странице несколько разных графиков, можно использовать базовые возможности R в виде параметра mfrow, например, 4 графика равного размера размещаются рядом при помощи par(mfrow=c(2,2)). Ниже рассмотрены более продвинутые реализации, работающие совместно с ggplot2.
Пакет gridExtra
Данный пакет снабжен достаточно подробной документацией. Основные возможности: комбинация рисунков, представленных объектами ggplot; комбинация таблиц в графическом виде; комбинация объектов разных типов, например таблиц, графиков и текста; работа с графическими примитивами. Приведу пару примеров с минимальным набором опций и небольшими комментариями.
Нарисуем 4 графика, один из которых пусть будет "фасеточным":
Все эти графики можно поместить на одну страницу при помощи следующего фрагмента кода:
Достаточно указать через запятую объекты, содержащие нужные графики, указать ширину столбцов (в данном примере первый график в первой строке будет в два раза шире остальных двух) и задать матрицу, согласно которой графики заполнят области итогового рисунка (здесь четвертый "фасеточный" график будет выведен под первыми тремя; при помощи NA можно оставить пустые области).
Добавить таблицу к графику можно следующим образом:
Результат:
Пакет cowplot
Очень похож по своим возможностям на предыдущий. Базовый вариант использования с метками и выравниванием:
Такое представление комбинированных графиков (с буквенными метками для каждого элемента) часто можно видеть в научных публикациях.
Выравнивание обычных и "фасеточных" графиков имеет свои особенности, описанные в руководстве.
Очень удобно реализованы вложенные комбинации графиков:
plot.mpg <- ggplot(mpg, aes(x = cty, y = hwy, colour = factor(cyl))) + geom_point(size=2.5) plot.diamonds <- ggplot(diamonds, aes(clarity, fill = cut)) + geom_bar() + theme(axis.text.x = element_text(angle=70, vjust=0.5)) plot.iris <- ggplot(iris, aes(Sepal.Length, Sepal.Width)) + geom_point() + facet_grid(. ~ Species) + stat_smooth(method = "lm") + background_grid(major = 'y', minor = "none") + panel_border() bottom_row <- plot_grid(plot.mpg, plot.diamonds, labels = c('B', 'C'), align = 'h', rel_widths = c(1, 1.3)) plot_grid(plot.iris, bottom_row, labels = c('A', ''), ncol = 1, rel_heights = c(1, 1.2))
В общем, очень круто получается - и всего в пару дополнительных строк кода по сравнению с отдельными графиками.
В основе всей этой красоты, помимо собственно ggplot2, лежат пакеты grid и gtable.
Пакет ggthemes - дополнительные темы для ggplot2
Содержит большое количество тем и отдельных графических элементов. По-настоящему приятных вариантов немного, но чего стоит возможность нарисовать картинку "как в Excel"! Создание и использование тем открывает возможность для применения языка R в такой не очень традиционной для него области, как инфографика (пример).
Пакет ggfortify
Предназначение этого пакета - визуализация данных из различных объектов, например, содержащих результаты подгонки общей или обобщенной линейной модели. Документация содержит большое количество примеров, ниже представлен один из них.
Комментариев нет:
Отправить комментарий