Dies soll nur die angenommene Antwort ergänzen.
Laut Hadley Wickkam, dem Autor von ggplot2, in seinem Buch 'ggplot2: Elegante Grafik für die Datenanalyse' (link here) auf p. 91 von Abschnitt 5.2 'Erstellen einer Zeichnung Schicht für Schicht':
Sie müssen nur eine von stat und geom: jede geom hat eine Standardstatistik, und jede Statistik hat eine Standardgeom.
Die oben genannte Antwort erklärt gut, warum die beiden unterschiedlich sind. Dies soll erklären, warum sie in der Praxis schwierig zu unterscheiden sind - wenn Sie eine Geom-Ebene verwenden, verwenden Sie auch implizit eine Stat-Ebene (auch wenn es sich nur um die Identitätstransformation handelt). Wenn Sie eine Stat-Ebene verwenden, verwenden Sie ebenfalls implizit eine Geom-Ebene.
Wenn Sie mit den Standardwerten der beiden Layer zufrieden sind, wäre es überflüssig, beide Layer explizit anzugeben. Selbst wenn Sie mit den Standardeinstellungen der beiden Ebenen nicht zufrieden sind, können Sie die Standardeinstellungen als Parameter für jede Ebene ändern (dh Sie können die Standardgeometrie als Parameter für eine beliebige stat_*
-Funktion ändern und den Standardstatus ändern als ein Parameter, der an eine beliebige geom_*
Funktion übergeben wird).In den Worten von Hadley Wickham (gleiche Quelle wie oben):
können Sie passieren params in ...
zu (in diesem Fall stat und geom Parameter werden automatisch gehänselt auseinander)
Dies ist eine Art schwer konzeptionell verstehen, weshalb ich auch diese Frage hatte. In seinem Artikel über die der ggplot2 zugrundeliegende Philosophie, found here, erläutert Hadley Wickham in Abschnitt 4, "Hierarchy of Defaults", die praktischen Überlegungen, die hinter diesem Standardverhalten stehen, was die Vereinfachung des Codes betrifft, der ansonsten unnötig lang wäre.
Zum Beispiel ohne Standardspezifikationen und mit der Grammatik von Grafiken allein, der Code für eine einfache Streudiagramm könnte wie folgt aussehen:
ggplot() +
layer(
data = diamonds, mapping = aes(x = carat, y = price),
geom = "point", stat = "identity", position = "identity"
) +
scale_y_continuous() +
scale_x_continuous() +
coord_cartesian()
Standardwerte für die Waage und Koordinaten, wir etwas stattdessen schreiben wie:
ggplot(data = Diamonds, aes(x = carat, y = price)) +
layer(
geom = "point", stat = "identity", position = "identity"
)
Aber das ist noch annoyingly lange natürlich, da die Werte von stat
und position
nur "identity"
sind, whic h bedeutet grundsätzlich "tue nichts" - also warum muss ich das explizit sagen?
jedoch die layer()
Funktion hat keine Standardwerte für stat
oder position
- sie müssen explizit auf die layer()
Funktion in einem Aufruf angegeben werden.
Um dies zu umgehen, Hadley machte die geom_*
Funktionen sowie die stat_*
Funktionen wie wrappers an die layer()
Funktion, die für Standardwerte haben sowohl die geom
und stat
Parameter. Der Unterschied zwischen den Funktionen stat_*
und geom_*
ist, welcher Parameter einen unveränderlichen (unveränderbar) Standardwert hat, stat
oder geom
.
Quelle: http://ggplot2.tidyverse.org/reference/layer.html
also die geom_*
Funktionen können Sie den Standardwert des stat
Parameter ändern, aber nicht der Standardwert des geom
Parameter, während für die stat_*
Funktionen können Sie den Standardwert des geom
ändern Parameter, aber nicht der Standardwert des Parameters stat
.
Eine Schicht ist eine Kombination aus Daten, Stat und Geom mit einer möglichen Positionseinstellung. Normalerweise werden Layer mit geom_*
oder stat_*
Aufrufen erstellt, können aber auch direkt mit dieser Funktion [layer()
Funktion] erstellt werden.
AFAIK Statistiken und Geome gehen immer zusammen, aber jeder Geom hat einen Standard stat. Sie müssen also keine Statistik explizit angeben, aber die Statistik wird weiterhin benötigt. Wenn Sie sich die [ggplot help] (http://docs.ggplot2.org/current/) ansehen, können Sie sehen, welcher Status für jeden geom Standard ist. Sie können den Prozess auch umkehren und ein 'geom' innerhalb eines Aufrufs von' stat_xxx() 'angeben. Die meiste Zeit müssen Sie sich nicht um diese Details kümmern, aber es ist gut zu wissen, falls Sie das Standardverhalten ändern möchten. – eipi10
Der wahrscheinlich häufigste Fall, in dem dies eine Rolle spielt, ist in 'geom_bar', wo standardmäßig Zeilen gezählt werden (der Standard stat für' geom_bar' ist 'stat_count'). Wenn Ihre Daten vorverdichtet sind, müssen Sie also stat = "identity" angeben, was bedeutet, dass die Rohdaten nicht umgewandelt werden. – eipi10
Danke für den Link, ich werde eine Notiz hinzufügen, um dieses Gefühl hoffentlich besser zu bedecken. – lmo