Explorative Datenanalyse mit
R The R Bootcamp |
adapted from paherald.sk.ca
In diesem Practical wirst du weiter üben mit ggplot2
schöne Grafiken zu erstellen.
Am Ende des Practicals wirst du wissen wie man:
facet
s benutzt.theme
s und scale
s anpasst.Öffne dein TheRBootcamp
R project. Es sollte die
Ordner 1_Data
und 2_Code
enthalten.
Öffne ein neues R Skript. Schreibe deinen Namen, das Datum und “PlottingII Practical” als Kommentare an den Anfang des Skripts.
## NAME
## DATUM
## PlottingII Practical
Speichere das neue Skript unter dem Namen
plottingII_practical.R
im 2_Code
Ordner.
Lade tidyverse
, viridis
, und
patchwork
.
Verwende die read_csv()
Funktion um den Datensatz
verbrechen.csv
als Objekt verbrechen
einzulesen. Denke an den Trick mit den Anführungszeichen.
Printe den Datensatz. Wurden alle Variablentypen korrekt identifiziert?
Verwende summary()
um einen weiteren Überblick über
die Daten zu bekommen.
facet
sIn diesem Abschnitt analysierst du den Zusammenhang zwischen dem Anteil der Bevölkerung, die mit der Metro fahren, und der Häufigkeit verschiedener Verbrechen.
prozent_metro
(x-Achse) und haeufigkeit
(y-Achse) zu plotten.ggplot(XX, aes(x = XX,
y = XX)) +
geom_point(alpha = .3) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
theme_minimal()
ggplot(verbrechen, aes(x = prozent_metro,
y = haeufigkeit)) +
geom_point(alpha = .3) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
theme_minimal()
scale_x_continuous(trans = 'pseudo_log')
und
scale_y_continuous(trans = 'pseudo_log')
um die y und
x-Achse zu stauchen. Später noch mehr zu Skalierungen.ggplot(verbrechen, aes(x = prozent_metro,
y = haeufigkeit)) +
geom_point(alpha = .3) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log')
verbrechen
dem
col
Argument in aes()
zuweist.ggplot(verbrechen, aes(x = prozent_metro,
y = haeufigkeit,
col = verbrechen)) +
geom_point(alpha = .3) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log')
col
versuche nun die verschiedenen Verbrechen mit facet_wrap()
zu differenzieren. Siehe unten.ggplot(XX, aes(x = XX,
y = XX)) +
geom_point(alpha = .3) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_wrap(~ XX)
ggplot(verbrechen, aes(x = prozent_metro,
y = haeufigkeit)) +
geom_point(alpha = .2) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_wrap(~verbrechen)
facet_grid()
um gleichzeitig nach Verbrechen und
prozent_armut
kleiner oder grösser 10% zu differenzieren.
Wie du im Code siehst, kannst du den logischen Vergleich direkt in die
Funktion schreiben.ggplot(XX, aes(x = XX,
y = XX)) +
geom_point(alpha = .3) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_grid(XX > 10 ~ XX)
ggplot(verbrechen, aes(x = prozent_metro,
y = haeufigkeit)) +
geom_point(alpha = .2) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_grid(prozent_armut > 10 ~ verbrechen)
bevoelkerung_dichte
grösser als 5000
als erste
Variable in facet_grid()
aus.ggplot(XX, aes(x = XX,
y = XX)) +
geom_point(alpha = .3) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_grid(XX > 5000 ~ XX)
ggplot(verbrechen, aes(x = prozent_metro,
y = haeufigkeit)) +
geom_point(alpha = .2) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_grid(bevoelkerung_dichte > 5000 ~ verbrechen)
theme
sIn diesem Abschnitt passt du deinen Lieblingsplot aus dem letzten
Abschnitt mit der theme()
Funktion an.
gg
Objekt mit Namen
verbrechen_gg
.verbrechen_gg <- XX
verbrechen_gg <- ggplot(verbrechen,
aes(x = prozent_metro,
y = haeufigkeit)) +
geom_point(alpha = .2) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_grid(bevoelkerung_dichte > 5000 ~ verbrechen)
"white"
. Verwende hierzu das panel.background
in der theme()
Funktion und die element_rect()
Helferfunktion.verbrechen_gg +
theme(
panel.background = element_rect(fill = XX)
)
verbrechen_gg +
theme(
panel.background = element_rect(fill = 'white')
)
"grey75"
und deren Grössen zu .25
und
.1
respektive. Verwende hierzu die Argumente
panel.grid.major
und panel.grid.minor
und die
Helferfunktion element_line()
.verbrechen_gg +
theme(
panel.background = element_rect(fill = XX),
panel.grid.major = element_line(color = XX, size = XX),
panel.grid.minor = element_line(color = XX, size = XX)
)
verbrechen_gg +
theme(
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(color = 'grey75', size = .25),
panel.grid.minor = element_line(color = 'grey75', size = .1)
)
white
. Verwende das strip.background
Argument
und wiederum die element_rect()
Helferfunktion.verbrechen_gg +
theme(
panel.background = element_rect(fill = XX),
panel.grid.major = element_line(color = XX, size = XX),
panel.grid.minor = element_line(color = XX, size = XX),
strip.background = element_rect(fill = XX),
)
verbrechen_gg +
theme(
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(color = 'grey75', size = .25),
panel.grid.minor = element_line(color = 'grey75', size = .1),
strip.background = element_rect(fill = 'white')
)
italic
mit dem face
Argument, setze den Text rechtsbündig
(hjust = 1
) und die Schriftgrösse (size
) auf
12
. Verwende hierzu das strip.text
Argument
und die genannten Argumente in element_text()
. Siehe
?element_text()
.verbrechen_gg +
theme(
panel.background = element_rect(fill = XX),
panel.grid.major = element_line(color = XX, size = XX),
panel.grid.minor = element_line(color = XX, size = XX),
strip.background = element_rect(fill = XX),
strip.text = element_text(face = XX, size = XX, hjust = XX)
)
verbrechen_gg +
theme(
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(color = 'grey75', size = .25),
panel.grid.minor = element_line(color = 'grey75', size = .1),
strip.background = element_rect(fill = 'white'),
strip.text = element_text(face = 'italic', size = 12, hjust = 1)
)
12
und setze jeweils einen Abstand von 10
.
Verwende hierzu die Argumente axis.title.x
und
axis.title.y
und die Helferfunktionen
element_text()
und margin()
. Siehe
?margin()
.verbrechen_gg +
theme(
panel.background = element_rect(fill = XX),
panel.grid.major = element_line(color = XX, size = XX),
panel.grid.minor = element_line(color = XX, size = XX),
strip.background = element_rect(fill = XX),
strip.text = element_text(face = XX, size = XX, hjust = XX),
axis.title.x = element_text(size = XX, margin = margin(t = XX)),
axis.title.y = element_text(size = XX, margin = margin(r = XX)),
)
verbrechen_gg +
theme(
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(color = 'grey75', size = .25),
panel.grid.minor = element_line(color = 'grey75', size = .1),
strip.background = element_rect(fill = 'white'),
strip.text = element_text(face = 'italic', size = 12, hjust = 1),
axis.title.x = element_text(size = 12, margin = margin(t = 10)),
axis.title.y = element_text(size = 12, margin = margin(r = 10))
)
1.1
in der Einheit "lines"
mittels des
panel.spacing
Argument und der unit()
Funktion.verbrechen_gg +
theme(
panel.background = element_rect(fill = XX),
panel.grid.major = element_line(color = XX, size = XX),
panel.grid.minor = element_line(color = XX, size = XX),
strip.background = element_rect(fill = XX),
strip.text = element_text(face = XX, size = XX, hjust = XX),
axis.title.x = element_text(size = XX, margin = margin(t = XX)),
axis.title.y = element_text(size = XX, margin = margin(r = XX)),
panel.spacing = unit(XX, units = XX)
)
verbrechen_gg +
theme(
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(color = 'grey75', size = .25),
panel.grid.minor = element_line(color = 'grey75', size = .1),
strip.background = element_rect(fill = 'white'),
strip.text = element_text(face = 'italic', size = 12, hjust = 1),
axis.title.x = element_text(size = 12, margin = margin(t = 10)),
axis.title.y = element_text(size = 12, margin = margin(r = 10)),
panel.spacing = unit(1.1, units = "lines")
)
theme()
Objekttheme
Einstellungen
in ein eigenes Objekt mit dem Namen mein_theme
.mein_theme <- theme(
XX = XX,
XX = XX,
...
)
mein_theme <- theme(
panel.background = element_rect(fill = 'white'),
panel.grid.major = element_line(color = 'grey75', size = .25),
panel.grid.minor = element_line(color = 'grey75', size = .1),
strip.background = element_rect(fill = 'white'),
strip.text = element_text(face = 'italic', size = 12, hjust = 1),
axis.title.x = element_text(size = 12, margin = margin(t = 10)),
axis.title.y = element_text(size = 12, margin = margin(r = 10)),
panel.spacing = unit(1.1, units = "lines")
)
mein_theme
(Ohne Klammern).ggplot(verbrechen,
aes(x = XX,
y = XX)) +
geom_point() +
facet_wrap(~ XX) +
mein_theme
ggplot(verbrechen,
aes(x = median_einkommen,
y = haeufigkeit)) +
geom_point() +
facet_wrap(~ staat) +
mein_theme
mein_theme
nicht gefällt, geh zur 1. Aufgabe
und nimmm Änderungen vor. Siehe ?theme
. Probiere zum
Beispiel mal die Argumente axis.ticks
und
strip.placement
aus.In diesem Abschnitt passt du die Skalierung von Achsen und Objekten an.
aes()
, so damit es später mehr zu skalieren
gibt. Weise im Code unten staat
dem Argument
col
zu und bevoelkerung
dem Argument
size
. Speichere den Plot wiederum als
verbrechen_gg
und plotte den Plot einmal.verbrechen_gg <- ggplot(data = verbrechen,
mapping = aes(x = prozent_metro,
y = haeufigkeit,
col = XX,
size = XX)) +
geom_point(alpha = .5) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_wrap(~ verbrechen) +
mein_theme
verbrechen_gg
verbrechen_gg <- ggplot(data = verbrechen,
mapping = aes(x = prozent_metro,
y = haeufigkeit,
col = staat,
size = bevoelkerung)) +
geom_point(alpha = .5) +
labs(title = "Verbrechen",
subtitle = "Haeufigkeit und Nutzung öffentlicher Verkehrsmittel") +
scale_x_continuous(trans = 'pseudo_log') +
scale_y_continuous(trans = 'pseudo_log') +
facet_wrap(~ verbrechen) +
mein_theme
verbrechen_gg
scale_size()
und darin das
range
argument um die Grösse der Punkte zu verkleinern.
Damit kannst du die Überlappung etwas verringern. Probiere ein paar
Werte für die untere und obere Grenze aus, die jeweils kleiner als
10
sein sollten, um einen guten Trade-off zwischen Grösse
und Überlappung zu finden.verbrechen_gg + scale_size(range = c(XX, XX))
verbrechen_gg + scale_size(range = c(.5, 3))
scale_color_colorblind()
(spezifische Version von scale_color_gradient()
), so dass
die Farben auch hinsichtlich Helligkeit voneinander abgrenzbar
sind.verbrechen_gg +
scale_size(range = c(XX, XX)) +
scale_color_colorblind()
verbrechen_gg +
scale_size(range = c(.5, 3)) +
scale_color_colorblind()
scale_color_manual()
und die viridis()
Funktion aus dem viridis
Paket (nicht vergessen zu laden)
um die Farben manuell anzupassen. Viridis ist ein anderer, etablierter
und schönerer Farbsatz, der ebenfalls Helligkeitsunterschiede
berücksichtigt.verbrechen_gg +
scale_size(range = c(XX, XX)) +
scale_color_manual(values = viridis(7))
verbrechen_gg +
scale_size(range = c(.5, 3)) +
scale_color_manual(values = viridis(7))
Es ist an der Zeit euren Plot als eine Bilddatei zu speichern.
Kreiere dafür zunächst mit dem Explorer (Windows) oder Finder (Mac) in
deinem Projektordner einen neuen Ordner namens
3_Figures
.
Verwende nun ggsave
um deinen letzten
verbrechen_gg
plot als eine .pdf
-Datei unter
dem Namen verbrechen.pdf
zu speichern. Danach solltest du
deinen Plot im Ordner 3_Figures
finden. Schaue nach und
öffne die Datei.
ggsave(filename = "3_Figures/verbrechen.pdf",
device = "pdf",
plot = verbrechen_gg,
width = 4,
height = 4,
units = "in")
ggsave(filename = "3_Figures/verbrechen.pdf",
device = "pdf",
plot = verbrechen_gg,
width = 4,
height = 4,
units = "in")
width
und height
in der
ggsave()
Funktion..png
anstatt eines .pdf
indem du filename
und device
entsprechend
anpasst.In diesem Abschnitt kombinierst du mit dem patchwork
Paket (nicht vergessen zu laden) multiple Plots zu einem einzelnen
Plot.
Kreiere 3 verschiedene Plots, die jeweils
haeufigkeiten
gegen eine andere Variable im Datensatz
plotten. Für eine bessere Übersicht verzichte erstmal auf
facet
s. Nenne die 3 Plots verbrechen_a
,
verbrechen_b
, und verbrechen_c
.
Stelle alle 3 Plots nebeneinander mit
verbrechen_a + verbrechen_b + verbrechen_c
.
Stelle den 3. Plot unter die ersten beiden mit
verbrechen_a + verbrechen_b / verbrechen_c
.
Ändere das theme
aller drei Plots gleichzeitig zu
theme_void()
mit dem &
-Operator.
Speichere deinen Plot als .pdf
mit
ggsave()
.
library(tidyverse)
# Scatterplot mit Hubraum und Meilen pro Gallone
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy)) +
geom_point()
# Speichere den Plot
mein_plot <- ggplot(data = mpg,
mapping = aes(x = displ, y = hwy)) +
geom_point()
# Plotte den Plot
mein_plot
# Facets ------------
# Kreiere Facetten nach Klasse
mein_plot <- mein_plot +
facet_wrap(~class)
# plot
mein_plot
# Ändere themes ------------
# Ändere die Hintergrundfarbe
mein_plot +
theme(
panel.background = element_rect(fill='green')
)
# Ändere die Rasterlinien
mein_plot +
theme(
panel.grid.major = element_line(color = 'red', size = 2),
panel.grid.minor = element_line(color = 'blue', size = 1)
)
# Ändere den Überschriftenhintergrund
mein_plot +
theme(
strip.background = element_rect(fill = 'blue'),
strip.text = element_text(face = 'bold', size = 12)
)
# Ändere die Achsenbeschriftungen
mein_plot +
theme(
axis.title.y = element_text(size = 12, margin = margin(r = 10)),
axis.title.x = element_text(size = 12, margin = margin(t = 10))
)
# Ändere die Panelabstände
mein_plot +
theme(
panel.spacing = unit(2, "lines")
)
# Speichere themes ------------
# Kreiere theme
mein_theme <- theme(
panel.background = element_rect(fill='green'),
panel.grid.major = element_line(color = 'red', size = 2),
panel.grid.minor = element_line(color = 'blue', size = 1),
strip.background = element_rect(fill = 'blue'),
strip.text = element_text(face = 'bold', size = 12),
strip.background = element_rect(fill = 'blue'),
strip.text = element_text(face = 'bold', size = 12),
axis.title.y = element_text(size = 12, margin = margin(r = 10)),
axis.title.x = element_text(size = 12, margin = margin(t = 10)),
panel.spacing = unit(2, "lines")
)
# Wende theme an (keine Klammern)
mein_plot + mein_theme
# Skalierung ------------
# Ändere die x-Achsenskalierung
mein_plot + scale_x_continuous(limits = c(0, 10))
# Ändere die Farbskalierung
ggplot(data = mpg,
mapping = aes(x = displ, y = hwy,
color = class)) +
geom_point() +
scale_color_manual(values = viridis(7))
# Kreiere Bilddateien ------------
# Kreiere ein pdf
ggsave(filename = "mein_plot_name",
plot = mein_plot,
device = "pdf",
path = 'plotting_folder',
width = 4,
height = 4,
units = "in")
Datei | Zeilen | Spalten |
---|---|---|
verbrechen.csv | 7497 | 12 |
Der verbrechen
Datensatz ist ein Ausschnitt aus dem
“Communities and Crime Unnormalized Data Set” des “UCI Machine Learning
Repository”.
Variable | Beschreibung |
---|---|
gemeinde | Name der Gemeinde |
staat | Kürzel des US Staats |
bevoelkerung | Bevölkerungs |
bevoelkerung_dichte | Dichte der Bevölkerungs |
haushalt_groesse | Durchschnittliche Haushaltsgrösse |
median_einkommen | Median Einkommen |
prozent_pension | Prozent in Pension befindlicher Einwohner |
prozent_armut | Prozent in Armut lebender Einwohner |
prozent_arbeitslos | Prozent arbeitsloser Einwohner |
prozent_metro | Prozent Metro-fahrender Einwohner |
verbrechen | Art des Verbrechen |
haeufigkeit | Häufigkeit des Verbrechens |
Paket | Installation |
---|---|
tidyverse |
install.packages("tidyverse") |
viridis |
install.packages("viridis") |
patchwork |
install.packages("patchwork") |
facet
s
Function | Package | Description |
---|---|---|
facet_wrap() |
ggplot2 |
Kreiere Facetting mit automatischen Zeilenbrüchen |
facet_grid() |
ggplot2 |
Kreiere Facetting in Tabellenform |
theme
s
Function | Package | Description |
---|---|---|
theme() |
ggplot2 |
Ändere theme s |
element_rect() |
ggplot2 |
Helferfunktion für Flächen |
element_line() |
ggplot2 |
Helferfunktion für Linien |
element_text() |
ggplot2 |
Helferfunktion für Text |
element_blank() |
ggplot2 |
Helferfunktion für das Entfernen von Elementen |
scale
s
Function | Package | Description |
---|---|---|
scale_x_*() , scale_y_*() |
ggplot2 |
Skaliert die x- und y-Achsen |
scale_size_*() |
ggplot2 |
Skaliert Grössen |
scale_color_*() |
ggplot2 |
Skaliert Farben |
scale_fill_*() |
ggplot2 |
Skaliert Füllfarben |
scale_alpha_*() |
ggplot2 |
Skaliert Transparenz |