¿Cuál es la diferencia entre facet_wrap () y facet_grid () en ggplot2?

80

He estado leyendo la ggplot2documentación de ambas funciones. Me preguntaba cuáles eran las diferencias y cuál sería la situación correcta para usar cada función ( facet_wrap()y facet_grid()).

library(ggplot2)

p <- qplot(displ, hwy, data = mpg)
p + facet_wrap(~ cyl)

p + facet_grid(~ cyl)

Proporciono este pequeño ejemplo para que sirva de punto de partida. La diferencia parece ser que la envoltura hace que las parcelas sean más autónomas y la cuadrícula hace una parcela en conjunto.

mármol
fuente

Respuestas:

60

La respuesta a continuación se refiere al caso en el que tiene 2 argumentos en facet_grid()o facet_wrap().

facet_grid(x ~ y)mostrará x*ygráficos incluso si algunos están vacíos. Ex:

library(ggplot2)
g <- ggplot(mpg, aes(displ, hwy))

Hay 4 ciclos distintos y 7 valores de clase distintos.

g + geom_point(alpha=1/3) + facet_grid(cyl~class)

Lo anterior muestra 4 * 7 = 28 parcelas, incluso si algunas están vacías (porque algunas clases no tienen valores de cilindro correspondientes, como filas con class = "midsize" no tienen ningún valor de cyl = "5" correspondiente) facet_wrap(x ~ y)en la otra mano, muestra sólo los gráficos que tienen valores reales.

g + geom_point(alpha=1/3) + facet_wrap(cyl~class)

Ahora se muestran 19 gráficos, uno para cada combinación de ciclo y clase.

Abhijeet Sharma
fuente
25

facet_wrap(...)cadenas juntas ggplotsen diferentes marcos (facetas) basadas en una sola variable. facet_grid(...)puede tomar dos variables:

p + facet_grid(cyl~class)

También puede utilizar una tercera variable para agrupar en cada faceta:

qplot(displ, hwy, data=mpg,color=factor(year)) + facet_grid(cyl~class)

muestra la mejora (o la falta de ella) en el kilometraje en carretera frente al desplazamiento por # cilindros y clase.

jlhoward
fuente
11
facet_wraptambién puede tomar dos variables.
marbel
9

Para gráficos de una sola variable, puede usar facet_grid()o facet_wrap().

facet_wrap(~variable)devolverá una matriz simétrica de gráficos para el número de niveles de variable.

facet_grid(.~variable)devolverá facetas iguales a los niveles de variabledistribuido horizontalmente.

facet_grid(variable~.)devolverá facetas iguales a los niveles de variabledistribuido verticalmente.

Chris Baskerville
fuente
1
¿Sabes por qué es facet_wrap(~variable)y no facet_wrap(variable~)?
amsquareb
9

Citando principalmente del libro ggplot2, p. 148f.

Hay tres tipos de facetas:

  • facet_null() : un solo gráfico, el predeterminado.
  • facet_wrap() : "envuelve" una cinta de paneles 1d en 2d.
  • facet_grid() : produce una cuadrícula 2d de paneles definidos por variables que forman las filas y columnas.

ingrese la descripción de la imagen aquí

Envoltura de facetas

facet_wrap()hace una cinta larga de paneles (generada por cualquier número de variables) y la envuelve en 2d. Esto es útil si tiene una sola variable con muchos niveles y desea organizar los gráficos de una manera más eficiente en cuanto al espacio.

Puede controlar la forma en que la cinta se envuelve en una cuadrícula con ncol, nrow, as.tabley dir. ncoly nrowcontrole cuántas columnas y filas (solo necesita establecer una). as.tablecontrola si las facetas se presentan como una tabla ( TRUE), con los valores más altos en la parte inferior derecha, o un gráfico ( FALSE), con los valores más altos en la parte superior derecha. dircontrola la dirección de envoltura de: h orizontal o v ertical.

Cuadrícula de facetas

Desde ?facet_grid: facet_grid()forma una matriz de paneles definidos por variables de facetas de filas y columnas. Es más útil cuando tiene dos variables discretas y todas las combinaciones de las variables existen en los datos.

Puede usar múltiples variables en las filas o columnas, "agregándolas" juntas, por ejemplo a + b ~ c + d.

facet grid()tiene un parámetro adicional llamado space, que toma los mismos valores que scales.

# If scales and space are free, then the mapping between position
# and values in the data will be the same across all panels. This
# is particularly useful for categorical axes
ggplot(subset(mpg, manufacturer %in% c("audi", "honda", "toyota")) , aes(drv, model)) +
    geom_point() +
    facet_grid(manufacturer ~ ., scales = "free", space = "free") +
    theme(strip.text.y = element_text(angle = 0))

ingrese la descripción de la imagen aquí

(simplificado) Ejemplo tomado de ?facet_grid

Markus
fuente