output:
xaringan::moon_reader:
css: ["./styles/slides.css"]
nature:
seal: false
highlightStyle: github
highlightLines: true
highlightLanguage: ["r"]
countIncrementalSlides: false
ratio: '16:9'
slideNumberFormat: |
<div class="progress-bar-container">
<div class="progress-bar" style="width: calc(%current% / %total% * 100%);">
</div>
</div>`
navigation:
scroll: false
library("knitr")
library("rmarkdown")
library("tidyverse")
library("icons")
pss <- readRDS("../datasets/pss.rds")
opts_chunk$set(#fig.path = 'pics/s6-', # path for calculated figures
fig.align = 'center', # alignment of figure (also possible right, left, default)
fig.show = 'hold', # how to show figures: hold -> direct at the end of code chunk; animate: all plots in an animation
out.width = "60%",
echo = TRUE, # Code is printed
eval = FALSE, # Code is NOT evaluated
warning = FALSE, # warnings are NOT displayed
message = FALSE, # messages are NOT displayed
comment = "", # no hashtags before output
results = "markdown",
rows.print = 15
)
htmltools::tagList(
xaringanExtra::use_clipboard(
button_text = "<i class=\"fa fa-clipboard\"></i>",
success_text = "<i class=\"fa fa-check\" style=\"color: #90BE6D\"></i>",
error_text = "<i class=\"fa fa-times-circle\" style=\"color: #F94144\"></i>"
),
rmarkdown::html_dependency_font_awesome()
)
class: center, title-slide, middle
Einführung in ggplot-Grammatik
Daten bändigen & visualisieren
B. Philipp Kleer
Methodentage 2021
11. Oktober 2021
.social[
r icons::icon_style(fontawesome("orcid"), fill=rgb(235, 129, 27, maxColorValue = 255), scale = 1)
r icons::icon_style(fontawesome("gitlab"), fill=rgb(235, 129, 27, maxColorValue = 255), scale = 1)
r icons::icon_style(fontawesome("university"), fill=rgb(235, 129, 27, maxColorValue = 255), scale = 1)
r icons::icon_style(fontawesome("researchgate"), fill=rgb(235, 129, 27, maxColorValue = 255), scale = 1)
]
Starten wir!
Nun tauchen wir in die Welt von ggplot2 ein. Das Paket ist das Grafik-Paket in R. Viele weitere Grafikpakete beruhen auf derselben Grammatik wie ggplot2, so dass Kenntnisse dieses Pakets jedem helfen.
--
Auch hier laden wir zuerst tidyverse bzw. installieren es, wenn es noch nicht installiert ist:
# install.packages("tidyverse")
library("tidyverse")
# alternativ:
# install.packages("ggplot2")
# library("ggplot2")
--
Anschließend laden wir den Datensatz pss
ins environment.
pss <- readRDS("../datasets/pss.rds") #oder eigener Pfad, wenn nicht in Cloud
ggplot
Wir machen gplot2 ist sehr umfangreich, wir machen heute einen Einstieg in die Grammatik. Da die Grafiken aber als Layer aufgebaut sind, können mithilfe des Verständnisses der Grafikgrammatik auch aufwendigere Grafiken erstellt werden.
Einen Überblick, was wir heute machen:
--
- Balkendiagramme und Grundaufbau von ggplot
--
- Histogramme
--
- Scatterplots
--
- Gruppierungen
class: inverse2, mline, center, middle
Balkendiagramme
Direkte Ausgabe
Ein Balkendiagramm ist ein Plot einer einzelnen kategorialen Variable. Mit der Funktion ggplot()
kann man direkt einen Plot ausgeben.
.pull-left-40[
# direkter Output
ggplot(data = pss,
mapping = aes(x = edu)
)
]
--
.pull-right-60[
# direkter Output
ggplot(data = pss,
mapping = aes(x = edu)
)
]
Objekte speichern
Alternativ (und meist besser) ist es Grafiken in Objekte zu speichern:
--
.pull-left-40[
# oder speichern als Objekt
mfPlot <- ggplot(data = pss,
mapping = aes(x = edu)
)
mfPlot
]
--
.pull-right-60[
# oder speichern als Objekt
mfPlot <- ggplot(data = pss,
mapping = aes(x = edu)
)
mfPlot
]
--
Aber warum sind beide Plots leer?
???
nur die Struktur wurde angegeben, nicht was geplottet werden soll.
ggplot() verstehen
Wir haben nur das Grundgerüst mit der Funktion ggplot()
übergeben. Diese Funktion beinhaltet immer die Daten (in data
) und die Struktur des Plots (mapping
). Ein Balkendiagramm ist eine univariate Darstellung und deshalb übergeben wir nur eine Variable (hier edu
).
--
Um nun ein Balkendiagramm aus dem Plot zu machen, benötigen wir einen weiteren Layer, der eben ein Balkendiagramm ausgibt. Dies ist der Zusatz geom_bar()
.
--
.pull-left-40[
ggplot(data = pss,
mapping = aes(x = edu)
) +
geom_bar() #<<
# oder:
# mfPlot +
# geom_bar()
]
--
.pull-right-60[ .center[
ggplot(data = pss,
mapping = aes(x = edu)
) +
geom_bar()
# oder:
# mfPlot +
# geom_bar()
] ]
Prozente statt Häufigkeiten
Gerade haben wir uns Häufigkeiten ausgeben lassen. Manchmal möchte man lieber Prozente: .pull-left-40[
ggplot(data = pss,
mapping = aes(x = edu,
y = ..prop.., #<<
group = 1 #<<
)
) +
geom_bar()
]
--
.pull-right-60[ .center[
ggplot(data = pss,
mapping = aes(x = edu,
y = ..prop.., #Einstellung Prozente
group = 1 # Einstellung nur eine Gruppe, sonst wäre jeder Balken 100 %
)
) +
geom_bar()
] ]
???
Hinweise zum Code:
-
y: Einstellung Prozente
-
group: Einstellung nur eine Gruppe, sonst wäre jeder Balken 100 %
Nun wirklich Balken
Alternativ können wir das Diagramm auch zu einem tatsächlichen Balkendiagramm machen und die Säulen loswerden:
--
.pull-left-40[
mfPlot +
geom_bar() +
coord_flip() #<<
]