Какая разница между facet_wrap() и facet_grid() в ggplot2?
Я читал документацию ggplot2
для обеих функций. Мне было интересно узнать, какие отличия и какая будет правильная ситуация для использования каждой функции (facet_wrap()
и facet_grid()
).
library(ggplot2)
p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl)
p + facet_grid(~ cyl)
Я предоставляю этот маленький пример, чтобы служить отправной точкой. Разница, похоже, сводится к тому, что сюжеты более автономны, а сетка делает один график все вместе.
Ответы
Ответ 1
Ответ ниже относится к случаю, когда у вас есть 2 аргумента в facet_grid()
или facet_wrap()
.
facet_grid(x ~ y)
будет отображать x*y
графики, даже если некоторые графики пусты. Пример:
library(ggplot2)
g <- ggplot(mpg, aes(displ, hwy))
Есть 4 различных цилиндра и 7 различных значений класса.
g + geom_point(alpha=1/3) + facet_grid(cyl~class)
Выше показаны 4 * 7 = 28 графиков, даже если некоторые из них пусты (потому что некоторые классы не имеют соответствующих значений цилиндров, например, строки с class= "midsize" не имеют соответствующего значения facet_wrap(x ~ y)
= "5") facet_wrap(x ~ y)
с другой стороны, отображает только графики, имеющие фактические значения.
g + geom_point(alpha=1/3) + facet_wrap(cyl~class)
Сейчас отображается 19 графиков, по одному на каждую комбинацию цил и класса.
Ответ 2
facet_wrap(...)
Строки вместе ggplots
в разных кадрах (грани), основанных на одной переменной. facet_grid(...)
может принимать две переменные:
p + facet_grid(cyl~class)
Вы также можете использовать третью переменную для группировки в каждой грани:
qplot(displ, hwy, data=mpg,color=factor(year)) + facet_grid(cyl~class)
показывает улучшение (или его отсутствие) в пробеге hwy и смещении # cylinders и класса.
Ответ 3
Для графиков с одной переменной вы можете использовать либо facet_grid()
либо facet_wrap()
.
facet_wrap(~variable)
вернет симметричную матрицу графиков для количества уровней variable
.
facet_grid(.~variable)
возвращает грани, равные уровням variable
распределенным по горизонтали.
facet_grid(variable~.)
возвращает грани, равные уровням variable
распределенным по вертикали.