Jaka jest różnica między facet_wrap () i facet_grid () w ggplot2?

80

Czytałem ggplot2dokumentację obu funkcji. Zastanawiałem się, jakie są różnice i jaka byłaby właściwa sytuacja dla użycia każdej funkcji ( facet_wrap()i facet_grid()).

library(ggplot2)

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

p + facet_grid(~ cyl)

Podaję ten mały przykład jako punkt wyjścia. Różnica wydaje się polegać na tym, że zawijanie sprawia, że ​​działki są bardziej autonomiczne, a siatka tworzy razem jedną działkę.

marbel
źródło

Odpowiedzi:

61

Poniższa odpowiedź dotyczy przypadku, gdy masz 2 argumenty w facet_grid()lub facet_wrap().

facet_grid(x ~ y)wyświetli x*ywykresy, nawet jeśli niektóre są puste. Dawny:

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

Istnieją 4 różne wartości cyl i 7 różnych wartości klas.

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

Powyższe wyświetla wykresy 4 * 7 = 28, nawet jeśli niektóre są puste (ponieważ niektóre klasy nie mają odpowiednich wartości cylindrów, np. Wiersze z atrybutem class = "midsize" nie mają żadnej odpowiadającej wartości cyl = "5") facet_wrap(x ~ y)na drugim hand, wyświetla tylko wykresy mające rzeczywiste wartości.

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

Obecnie wyświetlanych jest 19 wykresów, po jednym dla każdej kombinacji cyl i klasy.

Abhijeet Sharma
źródło
czy możesz spojrzeć na moje pytanie? stackoverflow.com/questions/65676788/… dzięki!
Noob
25

facet_wrap(...)łańcuchy razem ggplotsw różnych ramkach (fasetach) na podstawie jednej zmiennej. facet_grid(...)może przyjmować dwie zmienne:

p + facet_grid(cyl~class)

Możesz również użyć trzeciej zmiennej, aby pogrupować każdy aspekt:

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

pokazuje poprawę (lub jej brak) w stosunku do przemieszczenia w stosunku do liczby cylindrów i klasy.

jlhoward
źródło
11
facet_wrapmoże również przyjmować dwie zmienne.
marbel
10

Cytując głównie z książki ggplot2, s. 148f.

Istnieją trzy rodzaje fasetowania:

  • facet_null() : pojedynczy wykres, domyślny.
  • facet_wrap() : "zawija" 1d wstęgę paneli w 2d.
  • facet_grid() : tworzy siatkę 2D paneli zdefiniowanych przez zmienne, które tworzą wiersze i kolumny.

wprowadź opis obrazu tutaj

Owijanie faset

facet_wrap()tworzy długą wstążkę paneli (generowaną przez dowolną liczbę zmiennych) i zawija ją w 2d. Jest to przydatne, jeśli masz jedną zmienną z wieloma poziomami i chcesz ułożyć działki w sposób bardziej efektywny pod względem przestrzeni.

Można kontrolować jak taśma jest owinięty w siatce z ncol, nrow, as.tablei dir. ncoli nrowkontroluj liczbę kolumn i wierszy (wystarczy ustawić jedną). as.tablekontroluje, czy aspekty są rozmieszczone jak tabela ( TRUE), z najwyższymi wartościami w prawym dolnym rogu, czy jako plot ( FALSE), z najwyższymi wartościami w prawym górnym rogu. dirSterowanie kierunkiem opasania: H orizontal lub V ertical.

Siatka fasetowa

Od ?facet_grid:facet_grid() tworzy macierz paneli zdefiniowanych przez zmienne fasetowania wierszy i kolumn. Jest to najbardziej przydatne, gdy masz dwie zmienne dyskretne, a wszystkie kombinacje zmiennych istnieją w danych.

Możesz użyć wielu zmiennych w wierszach lub kolumnach, „dodając” je razem, np a + b ~ c + d.

facet grid()ma dodatkowy parametr o nazwie space, który przyjmuje takie same wartości jak 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))

wprowadź opis obrazu tutaj

(uproszczony) Przykład zaczerpnięty z ?facet_grid

markus
źródło
czy możesz spojrzeć na moje pytanie? stackoverflow.com/questions/65676788/… dzięki!
Noob
9

W przypadku wykresów z pojedynczą zmienną można użyć opcji facet_grid()lub facet_wrap().

facet_wrap(~variable)zwróci symetryczną macierz wykresów dla liczby poziomów variable.

facet_grid(.~variable)zwróci aspekty równe poziomom variablerozłożonym w poziomie.

facet_grid(variable~.)zwróci aspekty równe poziomom variablerozproszonym w pionie.

Chris Baskerville
źródło
1
Czy wiesz, dlaczego tak jest, facet_wrap(~variable)a nie facet_wrap(variable~)?
amsquareb