plot() ist R's Allzweck-Diagrammfunktion
Um in R zu zeichnen, ruf plot(x, y) mit zwei gleich langen numerischen Vektoren auf. R zeichnet einen Punkt für jedes Paar - den ersten Vektor entlang der horizontalen Achse, den zweiten entlang der vertikalen - und beschriftet die Achsen automatisch mit den Variablennamen:
x <- 1:12
y <- c(2, 5, 4, 8, 9, 12, 11, 15, 14, 18, 17, 21)
plot(x, y)
Das Ergebnis ist eine Streuung aus zwölf hohlen Kreisen, die stetig steigen, während x wächst. Das ist das gesamte Eintrittsgeld: keine Pakete zu installieren, keine Einrichtung. plot() kommt mit Base R und ist die Funktion hinter den meisten schnellen, explorativen Grafiken.
Weil der Code-Runner auf dieser Seite nur Textausgabe zeigt, sind Zeichenaufrufe in diesem Artikel statische Ausschnitte - füg sie in RStudio oder eine lokale R-Sitzung ein, um die Bilder zu sehen. Was du hier ausführen kannst, ist die Datenvorbereitung. Das ist ohnehin eine gute Gewohnheit: Sieh dir die Zahlen an, bevor du sie zeichnest.
Übergibst du nur einen Vektor, nutzt plot(y) die Indexpositionen 1, 2, 3, ... als horizontale Achse - praktisch für einen schnellen Blick auf eine Messreihe.
Den Diagrammtyp wählen
Das Argument type entscheidet, wie die Paare gezeichnet werden:
plot(x, y, type = "p") # points (the default)
plot(x, y, type = "l") # a connected line
plot(x, y, type = "b") # both: points joined by line segments
plot(x, y, type = "h") # vertical bars from zero, like a spike chart
plot(x, y, type = "s") # a step function
type = "l" macht aus der Streuung ein Liniendiagramm, was du für alles über die Zeit Gemessene willst. type = "b" hält die einzelnen Beobachtungen sichtbar und zeigt zugleich den Trend. type = "h" zeichnet ein dünnes senkrechtes Segment von null bis zu jedem Wert, und type = "s" zeichnet eine Treppe, die jeden Wert bis zum nächsten hält - nützlich für Größen, die sprunghaft wechseln, etwa einen Preis oder einen Lagerbestand.
Titel, Beschriftungen und Farben
Ein Diagramm ohne Beschriftung ist eine private Notiz an dich selbst. Drei Argumente beheben das: main für den Titel, xlab und ylab für die Achsenbeschriftungen. col setzt die Farbe:
plot(x, y,
type = "b",
main = "Monthly signups",
xlab = "Month",
ylab = "Signups (thousands)",
col = "steelblue")
col akzeptiert drei Arten von Werten:
- Benannte Farben -
"red","steelblue","tomato","darkgreen". R kennt 657 davon; führcolors()aus, um alle Namen aufzulisten. - Hex-Codes -
col = "#2C7FB8", genau wie in CSS. - Einen Farbvektor - einen pro Punkt, so färbst du Punkte nach Gruppe:
col = c("tomato", "steelblue")[group], wobeigroupein Faktor ist.
Punktsymbole mit pch, Größen mit cex und lwd
Der hohle Standardkreis ist zum Erkunden in Ordnung, wirkt aber matschig in allem, was du anderen zeigst. pch (plotting character) wählt das Symbol, nummeriert von 0 bis 25:
plot(x, y, pch = 19) # solid circle - the usual choice
plot(x, y, pch = 17) # solid triangle
plot(x, y, pch = 21, col = "black",
bg = "gold") # fillable circle: border + fill
Zwei Zahlen lohnen das Auswendiglernen. pch = 19 ist der gefüllte Kreis, den die meisten fertigen Diagramme nutzen. pch = 21 bis 25 sind die füllbaren Symbole: col färbt den Rand und bg das Innere, sodass du zweifarbige Punkte bekommst.
Größe und Linienstil haben eigene Regler:
cexskaliert die Punktgröße:cex = 1.5macht Punkte anderthalbmal so groß.lwdsetzt die Linienbreite fürtype = "l"oder"b":lwd = 2ist eine kräftige, lesbare Linie.ltysetzt das Linienmuster:lty = 1durchgezogen,2gestrichelt,3gepunktet.
Überlagern: points(), lines() und abline()
plot() beginnt ein frisches Diagramm. Um auf ein bestehendes zu zeichnen, nutze seine Begleiter - sie ergänzen das aktuelle Diagramm, statt es zu ersetzen:
plot(x, y, type = "l", lwd = 2, col = "steelblue",
main = "Actual vs. target")
points(x, y, pch = 19, col = "steelblue") # add the observations
lines(x, x * 1.5, lty = 2, col = "gray40") # add a second series, dashed
abline(h = 10, col = "tomato") # horizontal reference line at y = 10
abline() ist das Werkzeug für Referenzlinien und hat drei Modi:
abline(h = 10)- eine waagerechte Linie bei einem gegebenen Wert der vertikalen Achse.abline(v = 6)- eine senkrechte Linie bei einem gegebenen Wert der horizontalen Achse.abline(a = 0, b = 1.5)- eine Gerade über Achsenabschnittaund Steigungb.
Sein bester Trick: Übergib ihm ein angepasstes Modell, und es zeichnet die Regressionsgerade für dich - abline(lm(y ~ x)). Diese eine Zeile macht aus einer Streuung ein Argument; der Streudiagramm-Leitfaden baut darauf auf.
Eine Regel zu beachten: Die Achsengrenzen werden vom ersten plot()-Aufruf festgelegt. Reicht eine überlagerte Reihe darüber hinaus, wird sie abgeschnitten - setz xlim = und ylim = im ursprünglichen plot() großzügig genug für alles, was du ergänzen willst.
Eine Legende hinzufügen
Sobald ein Diagramm mehr als eine Reihe hat, braucht es eine Legende. legend() nimmt als erstes Argument ein Positionsschlüsselwort - "topright", "topleft", "bottomright", "bottomleft", "top", "bottom" oder "center" (das sind wörtliche R-Zeichenketten, sie bleiben in deinem Code also englisch) - dann die Beschriftungen und die passenden Stile:
legend("topright",
legend = c("Actual", "Target"),
col = c("steelblue", "gray40"),
lty = c(1, 2),
pch = c(19, NA),
lwd = 2)
Die Vektoren col, lty und pch müssen Eintrag für Eintrag zu legend passen - die erste Beschriftung bekommt die erste Farbe und so weiter. Nutze NA für einen Stil, der auf eine Reihe nicht zutrifft (hier hat die Ziellinie keine Punkte). Das Schlüsselwort heftet den Kasten an eine Ecke des Zeichenbereichs; wähl die Ecke, die deine Daten frei lassen.
Mehrere Felder und Speichern in eine Datei
Um mehrere Diagramme in einer Abbildung zu zeigen, setz das Zeichengitter vor dem Zeichnen: par(mfrow = c(1, 2)) teilt das Gerät in eine Zeile und zwei Spalten, und die nächsten beiden plot()-Aufrufe füllen die Felder der Reihe nach. Setz mit par(mfrow = c(1, 1)) zurück, wenn du fertig bist, sonst bleiben die folgenden Diagramme winzig.
Das Speichern in eine Datei funktioniert, indem du das Zeichnen auf ein Dateigerät statt auf den Bildschirm umleitest:
png("signups.png", width = 800, height = 600)
plot(x, y, type = "b", pch = 19, col = "steelblue",
main = "Monthly signups", xlab = "Month", ylab = "Signups")
dev.off()
Alles zwischen png() und dev.off() landet in der Datei; auf dem Bildschirm erscheint nichts. dev.off() zu vergessen ist der klassische Bug - die Datei bleibt gesperrt und leer, bis du das Gerät schließt. pdf(), jpeg() und svg() funktionieren genauso.
Was du mitnimmst
plot(x, y)zeichnet sofort;type =wechselt zwischen Punkten ("p"), Linien ("l") und beidem ("b").main,xlab,ylabbeschriften das Diagramm;colnimmt Farbnamen (657 davon incolors()) oder Hex-Codes.pch = 19ist der gefüllte Kreis;pch = 21–25trennen Rand (col) von Füllung (bg);cex,lwd,ltysteuern Größe und Linienstil.points(),lines()undabline()legen sich über das bestehende Diagramm -abline(lm(y ~ x))ergänzt eine Regressionsgerade in einem Aufruf.legend("topright", ...)beschriftet die Reihen;png(...)+dev.off()speichert in eine Datei.
Als Nächstes: das Histogramm - das Ein-Variablen-Diagramm, zu dem du zuerst greifst, wenn du einem neuen Datensatz begegnest.
Häufig gestellte Fragen
Wie erstellt man in R ein Diagramm?
Ruf plot(x, y) mit zwei gleich langen numerischen Vektoren auf. R öffnet ein Grafikfenster und zeichnet einen Punkt pro Paar. Ergänze type = "l" für ein Liniendiagramm, main, xlab und ylab für Beschriftungen und col für Farbe.
Was bedeutet pch in R?
pch (plotting character) wählt das Punktsymbol, nummeriert von 0 bis 25. pch = 19 ist der gefüllte Kreis, den die meisten wollen. Die Symbole 21 bis 25 haben eine separate Füllung: col setzt den Rand und bg das Innere.
Wie fügt man einem R-Diagramm eine Legende hinzu?
Ruf nach dem Diagramm legend() auf, mit einem Positionsschlüsselwort wie "topright" als erstem Argument, einem legend =-Vektor mit Beschriftungen und den passenden col-, pch- oder lty-Werten, die du im Diagramm verwendet hast.
Wie speichert man ein R-Diagramm in einer Datei?
Öffne vor dem Zeichnen ein Dateigerät und schließe es danach: png("myplot.png", width = 800, height = 600), dann dein Diagrammcode, dann dev.off(). Auf dem Bildschirm erscheint nichts - das Diagramm geht direkt in die Datei.