Streudiagramm in R mit ggplot2 anhand eines Beispiels
⚡ Intelligente Zusammenfassung
Streudiagramme in R mit ggplot2 ordnen zwei stetige Variablen mithilfe von geom_point() der x- und y-Achse zu. Diese Anleitung behandelt die Gruppenansicht.ping durch Farbe, logarithmische Transformationen, angepasste Regressionsgeraden, Beschriftungen, Facettierung, Überlagerungskorrekturen, Skalen, Themen und Speichern.

Warum Diagramme in der Datenanalyse wichtig sind
Diagramme sind der dritte Teil des Datenanalyseprozesses. Im ersten Teil geht es darum DatenextracProduktion, befasst sich der zweite Teil mit Bereinigen und Bearbeiten der Daten. Endlich muss der Datenwissenschaftler es vielleicht tun seine Ergebnisse grafisch kommunizieren.
Der Arbeitsablauf eines Data Scientists ist in der folgenden Abbildung zusammengefasst.
- Die erste Aufgabe eines Datenwissenschaftlers besteht darin, eine Forschungsfrage zu definieren. Diese Forschungsfrage hängt von den Zielen und Zielen des Projekts ab.
- Danach ist eine der wichtigsten Aufgaben das Feature Engineering. Der Datenwissenschaftler muss die Daten sammeln, bearbeiten und bereinigen
- Wenn dieser Schritt abgeschlossen ist, kann er mit der Erkundung des Datensatzes beginnen. Manchmal ist es aufgrund einer neuen Entdeckung notwendig, die ursprüngliche Hypothese zu verfeinern und zu ändern.
- Wenn das erläuternd Um eine Analyse zu erreichen, muss der Datenwissenschaftler die Fähigkeit des Lesers berücksichtigen die zugrunde liegenden Konzepte und Modelle verstehen.
- Seine Ergebnisse sollten in einem Format präsentiert werden, das für alle Beteiligten verständlich ist. Eine der besten Methoden, um mit uns kommunizieren, Die Ergebnisse werden durch a Graph.
- Diagramme sind ein unglaubliches Werkzeug zur Vereinfachung komplexer Analysen.
Im weiteren Verlauf dieses Tutorials werden diese Diagramme mit dem ggplot2-Paket erstellt.
Das ggplot2-Paket
Dieses Tutorial konzentriert sich auf die Erstellung von Diagrammen in R mit ggplot2.
In diesem Tutorial verwenden Sie das ggplot2-Paket. Dieses Paket implementiert die von Leland Wilkinson im Jahr 2005 beschriebene Grammatik der Grafik. ggplot2 ist flexibel, bietet zahlreiche Designvorlagen und ermöglicht die detaillierte Spezifizierung von Diagrammen.traction. Beachten Sie, dass es keine dreidimensionalen oder interaktiven Grafiken erzeugt; dafür sind Pakete wie plotly oder rgl erforderlich.
In ggplot2 besteht ein Diagramm aus den folgenden Argumenten:
- frustrierten
- ästhetische Karteping
- geometrisches Objekt
- statistische Transformationen
- unsere Tonleiter
- Koordinatensystem
- Positionsanpassungen
- Facettierung
Im Tutorial erfahren Sie, wie Sie diese Argumente steuern.
Die grundlegende Syntax von ggplot2 ist:
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Wie man in R ein Streudiagramm erstellt
Sehen wir uns an, wie ggplot mit dem mtcars-Datensatz funktioniert. Sie beginnen mit der Darstellung eines Streudiagramms der Variablen mpg und drat.
Grundlegendes Streudiagramm
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Code Erläuterung
- Sie übergeben zunächst den Datensatz mtcars an ggplot.
- Innerhalb des aes()-Arguments fügen Sie die x-Achse und die y-Achse hinzu.
- Das +-Zeichen bedeutet, dass R den Code weiterlesen soll. Es unterbricht den Code und macht ihn dadurch lesbarer.
- Verwenden Sie geom_point() für das geometrische Objekt.
Ausgang:
Streudiagramm mit Gruppen
Manchmal kann es interessant sein, die Werte anhand einer Datengruppe (z. B. Daten auf Faktorebene) zu unterscheiden.
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Code Erläuterung
- Die Funktion `aes()` innerhalb von `geom_point()` steuert die Farbe jeder Gruppe. Die Gruppeping Die Variable muss ein Faktor sein, daher wird die Zahnradfunktion in factor() eingeschlossen.
- Insgesamt haben Sie den Code aes(color =factor(gear)), der die Farbe der Punkte ändert.
Ausgang:
Ändern Sie die Achsenskala mithilfe einer logarithmischen Transformation
Die Reskalierung von Daten ist ein wichtiger Bestandteil der Arbeit von Analysten, da Rohdaten selten eine gleichmäßige Glockenkurve aufweisen. Die Logarithmierung ist eine Möglichkeit, Extremwerte zu komprimieren und die Darstellung weniger anfällig für Ausreißer zu machen.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Code Erläuterung
- Sie transformieren die x- und y-Variablen in log() direkt innerhalb der aes()-Map.ping.
Beachten Sie, dass jede andere Transformation angewendet werden kann, z. B. Standardisierung oder Normalisierung.
Ausgang:
Streudiagramm mit angepassten Werten
Sie können dem Diagramm eine weitere Informationsebene hinzufügen. Sie können die angepassten Werte eines Diagramms darüberlegen. lineare Regression.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
Code Erläuterung
- my_graph: Die Grafik wird im Objekt my_graph gespeichert, sodass in späteren Schritten Ebenen hinzugefügt werden können, ohne den gesamten Aufruf zu wiederholen.
- Das Argument stat_smooth() steuert die Glättungsmethode
- method = „lm“: Lineare Regression
- Spalte = “#C42126”: Code für die rote Farbe der Linie
- se = FALSE: Standardfehler nicht anzeigen
- `size = 1`: die Linienstärke. In ggplot2 3.4.0 und späteren Versionen wurde dieses Argument für Liniengeometrien in `linewidth` umbenannt.
Ausgang:
Beachten Sie, dass andere Glättungsmethoden verfügbar sind
- glm
- gam
- LOESS: Standardwert für weniger als 1,000 Beobachtungen
- rlm: robustes lineares Modell aus dem MASS-Paket
Bevor man mit der Gestaltung des Diagramms beginnt, sollte man wissen, wann ein Streudiagramm überhaupt die richtige Wahl ist.
Streudiagramm vs. Liniendiagramm Bubble Diagramm in R
Alle drei Verfahren stellen zwei stetige Variablen einander gegenüber, daher hängt die Wahl letztendlich davon ab, welche Schlussfolgerung der Leser ziehen soll.
| Eigenschaften | Streudiagramm | Liniendiagramm | Bubble Diagramm |
|---|---|---|---|
| Konzerte | Korrelation zwischen zwei Variablen | Änderung einer Variablen über eine geordnete Achse | Korrelation plus eine dritte Größenordnung |
| X-Achse | Jede stetige Variable | Üblicherweise Zeit oder eine andere geordnete Skala | Jede stetige Variable |
| Punktereihenfolge | Irrelevant | Kritische Punkte sind miteinander verbunden | Irrelevant |
| Dritte Variable | Durch Farbe oder Form | Durch separate Linien | Durch die Punktgröße |
| ggplot2-Aufruf | geom_point() | geom_line() | geom_point(aes(size = z)) |
Das Verbinden von Streupunkten mit einer Linie, wenn die x-Achse keine natürliche Ordnung aufweist, ist ein häufiger Fehler: Es impliziert eine nicht existierende Sequenz. Verwenden Sie `geom_line()` ausschließlich für geordnete Achsen wie Datumsangaben. Für Verteilungen einer einzelnen Variablen verwenden Sie eine Linie. Box-Plot stattdessen.
Fügen Sie dem Diagramm Informationen hinzu
Bisher enthalten die Diagramme keine erläuternden Texte. Der Leser sollte die Aussagekraft der Daten allein aus dem Diagramm ablesen können, ohne zusätzliche Dokumentation zu konsultieren. Daher benötigt das Diagramm aussagekräftige Beschriftungen. Diese können Sie mit der Funktion `labs()` hinzufügen.
Die grundlegende Syntax für labs() lautet:
labs(title = "Hello Guru99") arguments: - title: Main title displayed above the plot - subtitle: Secondary line below the title - caption: Note below the plot, usually the data source - x: Rename the x-axis - y: Rename the y-axis - color / fill: Rename the legend Example: labs(title = "Hello Guru99", subtitle = "My first plot")
Titel hinzufügen
Eine obligatorische Information, die hinzugefügt werden muss, ist natürlich ein Titel.
my_graph +
labs(
title = "Plot Mile per hours and drat, in log"
)
Code Erläuterung
- my_graph: Sie verwenden den von Ihnen gespeicherten Graphen. Dadurch wird vermieden, dass jedes Mal, wenn Sie dem Diagramm neue Informationen hinzufügen, alle Codes neu geschrieben werden.
- Du umschließt den Titel mit labs().
Ausgang:
Fügen Sie einen Titel mit einem dynamischen Namen hinzu
Ein dynamischer Titel ist hilfreich, um dem Titel genauere Informationen hinzuzufügen.
Mit der Funktion paste() können Sie statischen und dynamischen Text drucken. Die grundlegende Syntax von paste() lautet:
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
Ejemplo:
A <- 2010
paste("The first year is", A)
Ausgang:
## [1] "The first year is 2010"
B <- 2018
paste("The first year is", A, "and the last year is", B)
Ausgang:
## [1] "The first year is 2010 and the last year is 2018"
Sie können unserem Diagramm einen dynamischen Namen hinzufügen, nämlich den Durchschnitt von mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Code Erläuterung
- Sie erstellen den Durchschnitt von mpg mit dem in der Variablen „mean_mpg“ gespeicherten Mittelwert (mtcars$mpg).
- Sie verwenden paste() mit mean_mpg, um einen dynamischen Titel zu erstellen, der den Mittelwert von mpg zurückgibt
Ausgang:
Fügen Sie einen Untertitel hinzu
Zwei weitere Details machen die Grafik verständlicher. Sie sprechen von der Unterüberschrift und der Bildunterschrift. Die Unterüberschrift steht direkt unter der Überschrift. Die Bildunterschrift kann Auskunft darüber geben, wer die Berechnung durchgeführt hat und woher die Daten stammen.
my_graph +
labs(
title =
"Relation between Mile per hours and drat",
subtitle =
"Relationship break down by gear class",
caption = "Authors own computation"
)
Code Erläuterung
- Innerhalb von labs() haben Sie Folgendes hinzugefügt:
- Titel = „Beziehung zwischen Meile pro Stunde und Drat“: Titel hinzufügen
- subtitle = „Beziehungsaufschlüsselung nach Ausrüstungsklasse“: Untertitel hinzufügen
- caption = „Eigene Berechnung des Autors: Bildunterschrift hinzufügen
- Sie trennen jede neue Information durch ein Komma, ,
- Beachten Sie, dass Sie die Codezeilen umbrechen. Es ist nicht zwingend erforderlich und hilft nur, den Code leichter zu lesen
Ausgang:
X-Achse und Y-Achse umbenennen
Spaltennamen sind selten direkt für Präsentationen geeignet. Sie werden oft abgekürzt oder durch Unterstriche getrennt, wie z. B. GDP_CAP. Benennen Sie sie im Diagramm um und fügen Sie gegebenenfalls Einheiten hinzu.
my_graph +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code Erläuterung
- Innerhalb von labs() haben Sie Folgendes hinzugefügt:
- x = „Drat-Definition“: Ändern Sie den Namen der x-Achse
- y = „Meile pro Stunde“: Ändere den Namen der y-Achse
Ausgang:
Kontrollieren Sie die Waage
Sie können die Skalierung der Achse steuern.
Die Funktion seq() ist praktisch, wenn Sie eine Zahlenfolge erstellen müssen. Die grundlegende Syntax lautet:
seq(begin, last, by = x)
arguments:
- begin: First number of the sequence
- last: Last number of the sequence
- by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
Beispielsweise liefert ein Bereich von 0 bis 12 mit einer Schrittweite von 4 vier Zahlen: 0, 4, 8 und 12.
seq(0, 12,4)
Ausgang:
## [1] 0 4 8 12
Sie können die Skalierung der x- und y-Achse wie folgt steuern
my_graph +
scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) +
scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) +
labs(
x = "Drat definition",
y = "Mile per hours",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Code Erläuterung
- Die Funktion scale_y_continuous() steuert die y-Achse
- Die Funktion scale_x_continuous() steuert die x-Achse.
- Der Parameter breaks steuert die Aufteilung der Achse. Sie können die Zahlenfolge manuell hinzufügen oder die Funktion seq() verwenden:
- seq(1, 3.6, by = 0.2): Erzeugt die Sequenz von 1 bis 3.6 in Schritten von 0.2, also an 14 Stellen.
- seq(1, 1.6, by = 0.1): Erzeugt sieben Zahlen von 1 bis 1.6 in Schritten von 0.1.
Ausgang:
Thema
Schließlich ermöglicht ggplot2 das Umgestalten des gesamten Diagramms mit einer einzigen Theme-Funktion. Acht vollständige Themes sind im Paket enthalten:
- theme_bw()
- theme_light()
- theme_classic()
- theme_linedraw()
- theme_dark()
- theme_minimal()
- theme_gray()
- theme_void()
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Ausgang:
Grundstücke speichern
Nach all diesen Schritten ist es an der Zeit, Ihr Diagramm zu speichern und zu teilen. Rufen Sie direkt nach dem Zeichnen `ggsave("name_of_the_file.png")` auf, und das Bild wird auf der Festplatte gespeichert.
Das Diagramm wird im Arbeitsverzeichnis gespeichert. Um das Arbeitsverzeichnis zu überprüfen, können Sie diesen Code ausführen:
directory <- getwd() directory
Erstellen Sie das fertige Diagramm, speichern Sie es und überprüfen Sie, wo es gelandet ist:
my_graph +
theme_dark() +
labs(
x = "Drat definition, in log",
y = "Mile per hours, in log",
color = "Gear",
title = "Relation between Mile per hours and drat",
subtitle = "Relationship break down by gear class",
caption = "Authors own computation"
)
Ausgang:
ggsave("my_fantastic_plot.png")
Ausgang:
## Saving 5 x 4 in image
Hinweis: Nur zu pädagogischen Zwecken haben wir eine Funktion namens open_folder() erstellt, um den Verzeichnisordner für Sie zu öffnen. Sie müssen nur den folgenden Code ausführen und sehen, wo das Bild gespeichert ist. Sie sollten eine Datei mit dem Namen my_fantastic_plot.png sehen.
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
Wie man in R mit facet_wrap() facettierte Streudiagramme erstellt
Facettierung ist eine der acht zuvor genannten ggplot2-Komponenten und die eleganteste Lösung für unübersichtliche Diagramme. Anstatt alle Gruppen in einem einzigen Panel darzustellen, zeichnet ggplot2 für jede Ausprägung einer Variablen ein kleines Vielfaches, alle auf derselben Skala, sodass die Panels vergleichbar bleiben.
# One panel per gear count ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point() + facet_wrap(~ gear) + theme_classic()
Drei Argumente leisten den größten Teil der Arbeit.
- ncol or jetzt: Die Panels in ein bestimmtes Layout zwingen, zum Beispiel facet_wrap(~ gear, ncol = 2).
- unsere TonleiterStandardmäßig ist die Skala auf „fixiert“ eingestellt, sodass alle Panels denselben Achsenbereich verwenden. Verwenden Sie „free_y“ oder „free“, wenn sich die Gruppen stark in ihrer Größenordnung unterscheiden. Beachten Sie jedoch, dass freie Skalen den visuellen Vergleich zwischen Panels irreführend machen.
- Etikettierer: ersetzt den Rohfaktorwert in jedem Streifen, zum Beispiel labeller = label_both, um „gear: 4“ anstelle von „4“ auszugeben.
Zwei Gruppenping Variablen. Verwenden Sie facet_grid(), um eine Matrix aus Panels zu erstellen, wobei die erste Variable in den Zeilen und die zweite in den Spalten angeordnet ist:
ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point(aes(color = factor(cyl))) + facet_grid(am ~ gear) + theme_classic()
Facetten oder Farben? Die Farbdarstellung eignet sich gut für Diagramme mit bis zu vier Gruppen und geringer Überlappung. Bei größeren Gruppen oder starker Überlappung ist die Facettierung übersichtlicher, da jedes Segment nur seine eigenen Datenpunkte enthält. Sie können beides kombinieren: Facettierung nach einer Variable und Farbdarstellung nach einer anderen, wie im obigen Beispiel `facet_grid()`.
Wie man mit Überlappungen in R-Streudiagrammen umgeht
Bei einigen Dutzend Beobachtungen ist jeder Punkt sichtbar. Bei Tausenden stapeln sich die Markierungen übereinander, und der dichteste Bereich erscheint nur noch als ein einziger Fleck. Das ist Überplottenggplot2 bietet vier Standardlösungen an.
1. Deckkraft verringern. Die günstigste Lösung. Überlappungping Die Punkte dunkeln sich auf natürliche Weise ab, wodurch die Dichte sichtbar wird:
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + theme_classic()
2. Jitter diskrete Werte. Wenn eine Variable nur wenige Werte annimmt, liegen die Punkte auf denselben Koordinaten. Eine kleine, zufällige Verschiebung trennt sie:
ggplot(mtcars, aes(x = factor(cyl), y = mpg)) + geom_jitter(width = 0.15, height = 0) + theme_classic()
Setze die Höhe auf 0, damit die y-Werte, die die eigentlichen Informationen enthalten, niemals verändert werden.
3. Entsorgen Sie das Flugzeug im Müll. Bei großen Datensätzen werden die Beobachtungen pro Zelle gezählt und die Anzahl einer Farbe zugeordnet. Sechseckige Bereiche vermeiden die visuellen Artefakte, die quadratische Bereiche erzeugen:
ggplot(diamonds, aes(x = carat, y = price)) + geom_hex(bins = 40) + theme_classic()
4. Dichtekonturen zeichnen. Konturlinien umreißen die Bereiche, in denen sich die Beobachtungen konzentrieren, und legen sich sauber über verblasste Punkte:
ggplot(diamonds, aes(x = carat, y = price)) + geom_point(alpha = 0.05) + geom_density_2d(color = "#C42126") + theme_classic()
Als Faustregel gilt: Alpha verarbeitet einige tausend Punkte, hexagonales Binning verarbeitet Zehntausende, und darüber hinaus ist das Sampling der Daten mit dplyr::slice_sample() die pragmatische Option.
Streudiagramm in R: Code Literaturhinweis
Die folgende Tabelle listet den ggplot2-Aufruf für jede der oben genannten Optionen auf:
| Ziel | Code |
|---|---|
| Grundlegendes Streudiagramm |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
| Streudiagramm mit Farbgruppe |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x2))) |
| Fügen Sie angepasste Werte hinzu |
ggplot(df, aes(x = x1, y = y)) + geom_point() + stat_smooth(method = "lm") |
| Titel hinzufügen |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
| Untertitel hinzufügen |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
| x umbenennen |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
| Benennen Sie y um |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
| Kontrollieren Sie die Waage |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1)) |
| Erstellen Sie Protokolle |
ggplot(df, aes(x = log(x1), y = log(y))) + geom_point() |
| Thema |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
| Facette einer Gruppe |
ggplot(df, aes(x = x1, y = y)) + geom_point() + facet_wrap(~ x2) |
| Umgang mit Überlagerungen |
ggplot(df, aes(x = x1, y = y)) + geom_point(alpha = 0.3) |
| Gespeichert |
ggsave("my_fantastic_plot.png")
|












