Grafiken mit Base R
R kann Diagramme direkt erzeugen. Im Skript speicherst du sie in Dateien (png(), pdf(), svg()), in RStudio erscheinen sie im Plot-Fenster:
png("diagramm.png", width = 800, height = 500)
plot(mtcars$wt, mtcars$mpg, main = "Verbrauch und Gewicht",
xlab = "Gewicht (1000 lbs)", ylab = "Meilen pro Gallone",
pch = 19, col = "steelblue")
abline(lm(mpg ~ wt, data = mtcars), col = "red", lwd = 2)
legend("topright", legend = c("Autos", "Regression"), col = c("steelblue", "red"), pch = c(19, NA), lty = c(NA, 1))
dev.off()Die wichtigsten Diagrammtypen:
| Funktion | Diagramm |
|---|---|
plot(x, y) | Streudiagramm; mit type = "l" Linie |
hist(x) | Histogramm |
boxplot(y ~ gruppe, data) | Boxplot |
barplot(table(x)) | Balkendiagramm |
pie(werte) | Kreisdiagramm (selten sinnvoll) |
pairs(daten) | Streudiagramm-Matrix |
curve(sin, 0, 2*pi) | Funktionskurve |
par(mfrow = c(1, 2)) | mehrere Diagramme nebeneinander |
Wir können das Ergebnis der Berechnungen auch ohne Grafik prüfen:
h <- hist(mtcars$mpg, plot = FALSE, breaks = seq(10, 35, by = 5))
h$counts
h$mids
b <- boxplot(mpg ~ cyl, data = mtcars, plot = FALSE)
b$stats
names(b$n) <- b$names
b$n
bp <- barplot(table(mtcars$gear), plot = FALSE)
bp[1] 6 12 8 2 4
[1] 12.5 17.5 22.5 27.5 32.5
[,1] [,2] [,3]
[1,] 21.4 17.80 13.3
[2,] 22.8 18.65 14.3
[3,] 26.0 19.70 15.2
[4,] 30.4 21.00 16.4
[5,] 33.9 21.40 19.2
4 6 8
11 7 14
[,1]
[1,] 0.7
[2,] 1.9
[3,] 3.1Ein einfaches Text-Diagramm geht auch direkt in der Konsole:
haeufig <- table(mtcars$cyl)
for (n in names(haeufig)) cat(sprintf("%s Zyl. | %s %d\n", n, strrep("#", haeufig[[n]]), haeufig[[n]]))4 Zyl. | ########### 11 6 Zyl. | ####### 7 8 Zyl. | ############## 14
ggplot2: Grammatik der Grafiken
Das meistgenutzte Paket für schöne Diagramme. Du beschreibst Daten (data), Zuordnung (aes), Formen (geom_*) in Schichten:
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) +
geom_point(size = 3) +
geom_smooth(method = "lm", se = FALSE) +
labs(title = "Verbrauch und Gewicht", x = "Gewicht", y = "mpg", color = "Zylinder") +
theme_minimal()
ggsave("plot.png", width = 8, height = 5)Weitere Schichten: geom_bar, geom_histogram, geom_boxplot, geom_line, facet_wrap(~ gruppe) für Kleinbilder.
Das Tidyverse
Eine Sammlung zusammenpassender Pakete: dplyr (Datenaufbereitung), tidyr (Umformen), readr (Einlesen), ggplot2 (Grafik), stringr (Text), lubridate (Datum), purrr (funktionale Programmierung). Der Pipe-Operator (|> in Base R seit 4.1, %>% im Tidyverse) reicht das Ergebnis weiter:
library(dplyr)
mtcars |>
filter(mpg > 20) |>
group_by(cyl) |>
summarise(anzahl = n(), mittel_hp = mean(hp), max_mpg = max(mpg)) |>
arrange(desc(anzahl))
daten |> mutate(kmpl = mpg * 0.425) |> select(mpg, kmpl) |> head()Auch ohne Zusatzpakete steht die Pipe zur Verfügung:
mtcars |>
subset(mpg > 20) |>
(\(d) aggregate(hp ~ cyl, data = d, FUN = mean))() |>
(\(d) d[order(d$cyl), ])()
c(4, 9, 16) |> sqrt() |> sum()cyl hp 1 4 82.63636 2 6 110.00000 [1] 9
| dplyr-Verb | Aufgabe |
|---|---|
filter() | Zeilen auswählen |
select() | Spalten auswählen |
mutate() | Spalten berechnen |
arrange() | sortieren |
group_by() + summarise() | gruppieren und zusammenfassen |
left_join() | Tabellen verbinden |
pivot_longer() / pivot_wider() (tidyr) | Tabelle umformen |
Pakete verwalten
install.packages("dplyr") # einmal installieren (aus CRAN)
library(dplyr) # in jeder Sitzung laden
packageVersion("dplyr")
update.packages()
renv::init() # projektspezifische Paketversionen (reproduzierbar)"stats" %in% loadedNamespaces()
exists("mean")
environmentName(environment(mean))
is.function(utils::head)[1] TRUE [1] TRUE [1] "base" [1] TRUE
Berichte und Anwendungen
- R Markdown / Quarto: Text, Code und Ergebnisse in einem Dokument (HTML, PDF, Word)
- Shiny: interaktive Web-Apps in R
- tidymodels / caret: Machine Learning
- data.table: sehr schnelle Tabellenverarbeitung
- Bioconductor: Bioinformatik-Pakete
Ein Quarto-Dokument (bericht.qmd) besteht aus einem Kopf mit title: und format: html, normalem Markdown-Text, Inline-Code wie r round(mean(mtcars$mpg), 1) für berechnete Werte und Code-Blöcken (Chunks), die mit {r} geöffnet werden. Mit quarto render bericht.qmd entsteht daraus HTML, PDF oder Word.
Merke
- Base R zeichnet mit
plot,hist,boxplot,barplot; speichern mitpng()...dev.off() ggplot2baut Grafiken schichtweise (ggplot() + geom_*())- Tidyverse (
dplyr,tidyr,readr) mit Pipe|>für lesbare Datenaufbereitung - Pakete:
install.packageseinmal,libraryje Sitzung - Berichte mit Quarto/R Markdown, Apps mit Shiny
Aufgabe
Zeichne (in RStudio) ein Histogramm der PS-Werte (hp) in mtcars und beschrifte die Achsen.