Je nach Diagramm und Anwendungsfall kann notwendig sein, in ein mit ggplot erstelltes Diagramm Geraden/Linien einzuzeichnen. Dieser Beitrag zeigt, wie horizontale und vertikale Geraden eingezeichnet werden, eine Gerade mit Achsenabschnitt und Steigung sowie eine Regressionsgerade eingezeichnet werden können. Letzteres ist nur sinnvoll im Kontext von Streudiagrammen.
1 Beispieldaten erstellen und Diagramm zeichnen
Wer Beispieldaten zur Orientierung braucht, kann diese übernehmen und ausführen. Das Diagramm wird im Objekt p gespeichert, damit ein übersichtlicheres Arbeiten möglich ist.
# Datenpunkte generieren
x = c(0,1,2,3,4,4,5,6)
y = c(0,2,3,1,6,8,10,9)
# Data Frame erstellen
d <- as.data.frame(cbind(x,y))
# Streudiagramm erstellen
p <- ggplot (d, aes(x=x, y=y)) +
geom_point(size=2, shape="circle filled", col="black", fill="steelblue") +
labs(x="x", y="y")+
scale_y_continuous(breaks=c(0,2,4,6,8,10))
Das Ausgangsdiagramm sieht wie folgt aus:
2 Horizontale Gerade in ggplot einzeichnen
Eine Horizontale wird mit der Funktion geom_hline() eingezeichnet. Zusätzlich muss das Argument yintercept angegeben werden, um zu definieren, auf welcher Höhe der y-Achse die Linie verläuft.Ich zeichne eine Linie mit y=4 ein, die parallel zur x-Achse verläuft.
p + geom_hline(yintercept = 4)
Die Linie kann man auch gestrichelt darstellen. Dazu nutzt man das Argument linetype:
Linientypen:
- 1=solid (Standard)
- 2=dashed
- 3=dotted
- 4=dotdash
- 5=longdash
- 6=twodash
Dazu zeichne ich diesmal bei y=7 eine parallele Gerade zur x-Achse ein und stelle sie gestrichelt dar.
p + geom_hline(yintercept = 7, linetype="dashed")
3 Vertikale Gerade einzeichnen
Eine Vertikale wird mit der Funktion geom_vline(), allerdings mit dem Argument "xintercept" eingezogen. Hier ziehe ich eine Gerade ein, die bei x=3 parallel zur y-Achse verläuft.
p + geom_vline(xintercept = 3)
4 Gerade mit Achsenabschnitt und Steigung einzeichnen
Eine Gerade mit Achsenabschnitt und Steigung kann in ggplot mit der Funktion geom_abline() eingefügt werden. Wir benötigen hierfür nun aber zwei Argumente. Zum einen den Achsenabschnitt mit dem Argument intercept und zum anderen die Steigung mit dem Argument slope.
Ich zeichne eine Gerade bei y=1,2 mit der Steigung von 1,5. Zusätzlich mache ich sie etwas dicker (size=2), färbe sie exemplarisch orange ein und stelle sie gepunkted ("dotted") dar. Weitere Farben gibt es hier in der Übersicht.
p + geom_abline(intercept = 1.2, slope = 1.5, size=2,
colour="orange", linetype="dotted")
5 Regressionsgerade einzeichnen
Dies funktioniert wie bereits erwähnt nur für Streudiagramme. Hierfür benötigt man lediglich die Funktion geom_smooth().
- In das Argument formula werden Kriterium (abhängige Variable) und Prädiktor (unabhängige Variable) getrennt durch ~ eingesetzt.
- Das Argument method = "lm" gibt an, dass es sich um eine lineare Regressionsgerade handeln soll.
- Das Argument se = FALSE verhindert das zusätzliche Einzeichnen eines Konfidenzintervalls um die Regressionsgerade.
- colour und linetype sind optional und stellen die Gerade hier als gestrichelt und in rot dar.
p + geom_smooth(method = "lm", formula = y~x,
se = FALSE, colour = "red", linetype = "dashed")
6 Kombination mehrerer Geraden
Abschließend noch ein kurzer Überblick, wie man zwei oder mehr Gerade einzeichnet, beispielsweise, um einen Schnittpunkt zu erzeugen:
p + geom_hline(yintercept = 3, linetype="dashed") +
geom_vline(xintercept = 2, linetype="dashed") +
geom_smooth(method = "lm", formula = y~x,
se = FALSE, colour = "red", linetype = "dashed")
7 Videotutorial