R Language
ggplot2
Suche…
Bemerkungen
ggplot2
hat eine eigene perfekte Referenz-Website http://ggplot2.tidyverse.org/ .
In den meisten data.frame
ist es zweckmäßiger, die Struktur oder den Inhalt der aufgezeichneten Daten (z. B. eines data.frame
) anzupassen, als nachträglich data.frame
in der data.frame
anzupassen.
RStudio veröffentlicht ein sehr hilfreiches "Data Visualization with ggplot2" Cheatsheet, das Sie hier finden können .
Streudiagramme
Wir zeichnen ein einfaches Streudiagramm mit dem integrierten Iris-Datensatz wie folgt:
library(ggplot2)
ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color = Species)) +
geom_point()
Mehrere Plots anzeigen
Zeigen Sie mehrere Darstellungen in einem Bild mit den verschiedenen facet
. Ein Vorteil dieser Methode besteht darin, dass alle Achsen die gleiche Skalierung über Diagramme hinweg haben, so dass sie auf einen Blick leicht zu vergleichen sind. Wir verwenden den in ggplot2
enthaltenen mpg
Datensatz.
Diagramme Zeile für Zeile umbrechen (versucht, ein quadratisches Layout zu erstellen):
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_wrap(~class)
Mehrere Diagramme in einer Zeile und in mehreren Spalten anzeigen:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(.~class)
Mehrere Diagramme in einer Spalte, in mehreren Zeilen anzeigen:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(class~.)
Zeigen Sie mehrere Diagramme in einem Raster mit zwei Variablen an:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(trans~class) #"row" parameter, then "column" parameter
Bereiten Sie Ihre Daten für das Plotten vor
ggplot2
funktioniert am besten mit einem langen ggplot2
. Die folgenden Beispieldaten, die die Preise für Süßigkeiten an 20 verschiedenen Tagen darstellen, werden in einem als breit bezeichneten Format dargestellt, da jede Kategorie eine Spalte enthält.
set.seed(47)
sweetsWide <- data.frame(date = 1:20,
chocolate = runif(20, min = 2, max = 4),
iceCream = runif(20, min = 0.5, max = 1),
candy = runif(20, min = 1, max = 3))
head(sweetsWide)
## date chocolate iceCream candy
## 1 1 3.953924 0.5890727 1.117311
## 2 2 2.747832 0.7783982 1.740851
## 3 3 3.523004 0.7578975 2.196754
## 4 4 3.644983 0.5667152 2.875028
## 5 5 3.147089 0.8446417 1.733543
## 6 6 3.382825 0.6900125 1.405674
Für die Konvertierung von sweetsWide
in das lange Format für die Verwendung mit ggplot2
können mehrere nützliche Funktionen von Basis R und die Pakete reshape2
, data.table
und tidyr
(in chronologischer Reihenfolge) verwendet werden:
# reshape from base R
sweetsLong <- reshape(sweetsWide, idvar = 'date', direction = 'long',
varying = list(2:4), new.row.names = NULL, times = names(sweetsWide)[-1])
# melt from 'reshape2'
library(reshape2)
sweetsLong <- melt(sweetsWide, id.vars = 'date')
# melt from 'data.table'
# which is an optimized & extended version of 'melt' from 'reshape2'
library(data.table)
sweetsLong <- melt(setDT(sweetsWide), id.vars = 'date')
# gather from 'tidyr'
library(tidyr)
sweetsLong <- gather(sweetsWide, sweet, price, chocolate:candy)
Alle ergeben ein ähnliches Ergebnis:
head(sweetsLong)
## date sweet price
## 1 1 chocolate 3.953924
## 2 2 chocolate 2.747832
## 3 3 chocolate 3.523004
## 4 4 chocolate 3.644983
## 5 5 chocolate 3.147089
## 6 6 chocolate 3.382825
Weitere Informationen zum Konvertieren von Daten zwischen langen und breiten Formaten finden Sie unter Umformen von Daten zwischen langen und breiten Formularen .
Das Ergebnis von sweetsLong
enthält eine sweetsLong
und eine Spalte, in der die Süßigkeit beschrieben wird. Nun ist das Plotten viel einfacher:
library(ggplot2)
ggplot(sweetsLong, aes(x = date, y = price, colour = sweet)) + geom_line()
Fügen Sie dem Plot horizontale und vertikale Linien hinzu
Fügen Sie für alle kategorialen Variablen eine gemeinsame horizontale Linie hinzu
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_hline(aes(yintercept=5), colour="#990000", linetype="dashed")
Fügen Sie für jede kategoriale Variable eine horizontale Linie hinzu
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
# add horizontal levels for drawing lines
df$hval <- df$y + 2
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval), colour="#990000", width=0.75)
Horizontale Linie über gruppierten Balken hinzufügen
# sample data
df <- data.frame(x = rep(c('A', 'B'), times=2),
group = rep(c('G1', 'G2'), each=2),
y = c(3, 4, 5, 6),
hval = c(5, 6, 7, 8))
p1 <- ggplot(df, aes(x=x, y=y, fill=group))
+ geom_bar(position="dodge", stat="identity")
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval),
colour="#990000",
position = "dodge",
linetype = "dashed")
Vertikale Linie hinzufügen
# sample data
df <- data.frame(group=rep(c('A', 'B'), each=20),
x = rnorm(40, 5, 2),
y = rnorm(40, 10, 2))
p1 <- ggplot(df, aes(x=x, y=y, colour=group)) + geom_point()
p1 + geom_vline(aes(xintercept=5), color="#990000", linetype="dashed")
Vertikales und horizontales Balkendiagramm
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")
Es ist möglich, ein horizontales Balkendiagramm zu erhalten, indem einfach coord_flip () - Ästhetik zum ggplot-Objekt hinzugefügt wird:
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")+
coord_flip()
Geigenhandlung
Violinendiagramme sind Kerndichteschätzungen, die in der vertikalen Ebene gespiegelt sind. Sie können verwendet werden, um mehrere Distributionen nebeneinander zu visualisieren. Die Spiegelung hilft dabei, Unterschiede hervorzuheben.
ggplot(diamonds, aes(cut, price)) +
geom_violin()
Violin-Plots werden nach ihrer Ähnlichkeit mit dem Musikinstrument benannt. Dies ist besonders sichtbar, wenn sie mit einem überlagerten Boxplot gekoppelt sind. Diese Visualisierung beschreibt dann die zugrunde liegenden Verteilungen, sowohl in Bezug auf Tukeys 5-Zahlen-Zusammenfassung (als Boxplots) als auch auf die Schätzung der vollen kontinuierlichen Dichte (Violinen).
ggplot(diamonds, aes(cut, price)) +
geom_violin() +
geom_boxplot(width = .1, fill = "black", outlier.shape = NA) +
stat_summary(fun.y = "median", geom = "point", col = "white")
Erstellen Sie grundlegende Diagramme mit qplot
qplot soll der base r plot()
Funktion ähneln und versucht, Ihre Daten immer darzustellen, ohne zu viele Angaben zu machen.
grundlegendes qplot
qplot(x = disp, y = mpg, data = mtcars)
Farben hinzufügen
qplot(x = disp, y = mpg, colour = cyl,data = mtcars)
ein glatter hinzufügen
qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)