Was ist der Unterschied zwischen facet_wrap () und facet_grid () in ggplot2?

80

Ich habe die ggplot2Dokumentation für beide Funktionen gelesen . Ich habe mich gefragt, was die Unterschiede sind und welche Situation für die Verwendung der einzelnen Funktionen ( facet_wrap()und facet_grid()) richtig wäre .

library(ggplot2)

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

p + facet_grid(~ cyl)

Ich gebe dieses kleine Beispiel als Ausgangspunkt. Der Unterschied scheint darin zu liegen, dass Wrap die Diagramme autonomer macht und das Raster insgesamt ein Diagramm erstellt.

Marbel
quelle

Antworten:

60

Die Antwort unten bezieht sich auf den Fall, wenn Sie 2 Argumente in facet_grid()oder haben facet_wrap().

facet_grid(x ~ y)zeigt x*yDiagramme an, auch wenn einige Diagramme leer sind. Ex:

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

Es gibt 4 verschiedene Zyl und 7 verschiedene Klassenwerte.

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

Die obigen Anzeigen 4 * 7 = 28 Stellplätze, auch wenn einige leer sind (weil einige Klassen haben keine Zylinderwerten entsprechen, wie Zeilen mit class = „mittelgroßen“ hat keine entsprechende Zyl = „5“ -Wert) facet_wrap(x ~ y)auf der anderen Seite Hand zeigt nur die Diagramme mit tatsächlichen Werten an.

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

Es werden jetzt 19 Diagramme angezeigt, eines für jede Kombination aus Zyl. Und Klasse.

Abhijeet Sharma
quelle
25

facet_wrap(...)Zeichenfolgen ggplotsin verschiedenen Frames (Facetten) basierend auf einer einzelnen Variablen. facet_grid(...)kann zwei Variablen annehmen:

p + facet_grid(cyl~class)

Sie können auch eine dritte Variable verwenden, um in jeder Facette zu gruppieren:

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

zeigt die Verbesserung (oder das Fehlen davon) der Kilometerleistung im Vergleich zur Verschiebung durch #Zylinder und Klasse.

jlhoward
quelle
11
facet_wrapkann auch zwei Variablen annehmen.
Marbel
9

Für einzelne variable Diagramme können Sie entweder facet_grid()oder verwenden facet_wrap().

facet_wrap(~variable)gibt eine symmetrische Matrix von Plots für die Anzahl der Ebenen von zurück variable.

facet_grid(.~variable)gibt Facetten zurück, die den variablehorizontal verteilten Ebenen entsprechen .

facet_grid(variable~.) gibt Facetten zurück, die den Ebenen von entsprechen variable vertikal verteilten .

Chris Baskerville
quelle
1
Weißt du warum es ist facet_wrap(~variable)und nicht facet_wrap(variable~)?
Amsquareb
9

Zitiert hauptsächlich aus dem Buch ggplot2, p. 148f.

Es gibt drei Arten von Facetten:

  • facet_null() : ein einzelnes Diagramm, die Standardeinstellung.
  • facet_wrap() : "wickelt" ein 1d-Band von Paneelen in 2d.
  • facet_grid() : Erzeugt ein 2D-Raster von Bedienfeldern, die durch Variablen definiert sind, die die Zeilen und Spalten bilden.

Geben Sie hier die Bildbeschreibung ein

Facettenwickel

facet_wrap()erstellt ein langes Band mit Bedienfeldern (generiert durch eine beliebige Anzahl von Variablen) und verpackt es in 2d. Dies ist nützlich, wenn Sie eine einzelne Variable mit vielen Ebenen haben und die Diagramme platzsparender anordnen möchten.

Sie können steuern , wie das Band in ein Gitter mit eingewickelt wird ncol, nrow, as.tableund dir. ncolund nrowsteuern Sie, wie viele Spalten und Zeilen (Sie müssen nur eine festlegen). as.tableSteuert, ob die Facetten wie eine Tabelle ( TRUE) mit den höchsten Werten unten rechts oder ein Diagramm ( FALSE) mit den höchsten Werten oben rechts angeordnet sind. dirsteuert die Wickelrichtung : h orizontal oder v ertikale.

Facettenraster

From ?facet_grid: facet_grid()bildet eine Matrix von Bedienfeldern, die durch Zeilen- und Spaltenfacettierungsvariablen definiert sind. Dies ist am nützlichsten, wenn Sie zwei diskrete Variablen haben und alle Kombinationen der Variablen in den Daten vorhanden sind.

Sie können mehrere Variablen in den Zeilen oder Spalten verwenden, indem Sie sie "addieren", z a + b ~ c + d .

facet grid()hat einen zusätzlichen Parameter namens space, der die gleichen Werte wie annimmt 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))

Geben Sie hier die Bildbeschreibung ein

(vereinfacht) Beispiel aus ?facet_grid

Markus
quelle