Linientypen, Symbole und Farben in R-Plots

R bietet verschiedene Möglichkeiten, seine Datenreihen in Plots unterscheidbar zu machen. Dazu gibt man in den Plot-Befehlen den zu ändernden Parameter, sowie einen Zahlenwert an. Ich vergesse allerdings immer, welche Zahl zu welcher Farbe oder zu welchem Linientyp gehört. Daher liste ich in diesem Artikel Zahlenwerte für folgende Parameter auf:

  1. Typen von Linien (lty).
    Beispiel: plot(c(1:10), type="o", lty=3).
  2. Farben (col).
    Beispiel: plot(c(1:10), type="o", col=4).
  3. Typen von Punkten / Sybole (pch; point character).
    Beispiel: plot(c(1:10), type="o", pch=5).

Linientypen

In R gibt es sechs verschiedene Typen von Linien. Die Zahlen für die Linientypen werden mit einer Periode von sechs „recycled“. Dadurch entspricht der Typ sieben (7) wieder dem Typen eins (1), eine Linie vom Typ acht (8) sieht aus wie eine Linie vom Typen zwei (2) und so weiter. Für jeden der Linien-Typen gibt es auch einen Namen (siehe auch Beschreibung des Parameters lty in der R-Hilfe zu par(): ?par):

  • 0: „blank“; unsichtbare Linie (=> wird nicht gezeichnet)
  • 1: „solid“
  • 2: „dashed“
  • 3: „dotted“
  • 4: „dotdash“
  • 5: „longdash“
  • 6: „twodash“
In R gibt es sechs verschiedene Typen von Linien, hier abwechselnd in rot und grün dargestellt. Jeder der Linientypen ist in 3 verschiedenen Größen (lwd=1-3) dargestellt. Die Werte für die Linientypen wiederholen sich in einer Periode von sechs. Daher entspricht die Angabe lty=7 der Angabe lty=1, die Angabe lty=8 entspricht der Angabe lty=2, und so weiter.
In R gibt es sechs verschiedene Typen von Linien, hier abwechselnd in rot und grün dargestellt. Jeder der Linientypen ist in 3 verschiedenen Größen (lwd=1-3) dargestellt. Die Werte für die Linientypen wiederholen sich in einer Periode von sechs. Daher entspricht die Angabe lty=7 der Angabe lty=1, die Angabe lty=8 entspricht der Angabe lty=2, und so weiter.

Das oben stehende Bild habe ich mit folgendem Code erzeugt:

1
2
3
4
5
6
7
8
# 6 Linientypen
png("linientypen.png")
par(mar=c(0,4,0,0)+.1, cex=1.5)
plot(1,1, type="n", ylim=c(0, 7), xaxt="n", xlab="", ylab="Linentyp (lty)", las=1)
abline(h=c(0:7),     lty=c(0:7), lwd=3, col=c(2,3))
abline(h=c(0:7)-0.2, lty=c(0:7), lwd=2, col=c(2,3))
abline(h=c(0:7)-0.4, lty=c(0:7), lwd=1, col=c(2,3))
dev.off()

Farben

In der Standard-Palette von R befinden sich acht verschiedene Farben. Dazu kommt noch der Wert 0, bei dem die Hintergrundfarbe als Farbe verwendet wird. Die Farben werden mit einer Periode von acht „recycled“. Durch diese fortlaufende Wiederholung, entspricht die Farbe neun (9) der Farbe eins (1), die Farbe zehn (10) wieder der Farbe zwei (2) und so weiter. Anstatt einer Zahl kann man auch direkt den RGB-Farbwert angeben (z.B. plot(1, 1, col="#000000") anstatt plot(1, 1, col=1) ). Weitere Details gibt es im Bereich „Color Specification“ in der R-Hilfe zu den Grafik-Parametern (?par).

In R gibt es acht verschiedene Farben. Hinzu kommt der Wert 0, bei dem die Hintergrundfarbe als Farbe verwendet wird (siehe diagonale Linie). Mit einer Periodenlänge von 8, werden die Farben wiederholt (wiederholte Farben sind mit einer dünnen Linie dargestellt).
In R gibt es acht verschiedene Farben. Hinzu kommt der Wert 0, bei dem die Hintergrundfarbe (hier: #eeeeee) als Farbe verwendet wird (siehe diagonale Linie). Mit einer Periodenlänge von 8, werden die Farben wiederholt (wiederholte Farben sind mit einer dünnen Linie dargestellt).

Für das vorangegangene Bild habe ich folgenden Code verwendet:

1
2
3
4
5
6
7
# 8 LinienFarben
png("linienfarben.png")
par(mar=c(0,4,0,0)+.1, cex=1.5, bg="#eeeeee")
plot(1,1, type="n", ylim=c(0, 11), xlim=c(0, 11), xaxt="n", xlab="", ylab="Linenfarbe (col)", las=1, lab=c(1,11,0))
abline(h=c(0:11), lty=1, lwd=c(rep(10,9), rep(1,9)), col=c(0:11))
abline(a=0, b=1, lwd=10, col=0)
dev.off()

Punkttypen / Symbole

Um den Punkttyp zu definieren, kann entweder ein einzelnes Zeichen oder eine Zahl angeben werden. In der Hilfe zum Befehl par() (?par oder ?graphics::par) steht dazu:

Note that only integers and single-character strings can be set as a graphics parameter (and not NA nor NULL)

Eine detaillierte Liste gibt es in der R-Hilfe zur Funktion points() (?points; Bereich „‚pch‘ values“). Hier eine kurze Zusammenfassung:

  • Zeichen 018: S-kompatible Vektor Symbole
  • Zeichen 1925: Weitere R Vektor Symbole. Die Zeichen 2125 können mit Hilfe von bg innerhalb des plot-Befehls (hier: points()) eingefärbt werden. Achtung: Die Angabe von bg innerhalb von points() hat hier eine andere Auswirkung als die Angabe von bg innerhalb von par() (z.B. par(bg="#ff00ff")). Durch letzteres setzt man die Hintergrundfarbe der gesamten Plot-Fläche.
  • Zeichen 2631: Werden ignoriert
  • Zeichen 32127: ASCII Zeichen

In der folgenden Grafik werden die die ersten 26 Zeichen dargestellt (+ zwei negative Werte).

Punkt-Typen für "pch"-Werte von -2 bis +25. Der Innernraum der Zeichen 21 bis 25 wurde durch die Angabe " bg='red' " innerhalb des Befehls "points()" rot eingefärbt.
Punkt-Typen für „pch“-Werte von -2 bis +25. Der Innernraum der Zeichen 21 bis 25 wurde durch die Angabe “ bg=’red‘ “ innerhalb des Befehls „points()“ rot eingefärbt.

Das oben stehende Bild wurde mit folgenden Befehlen erzeugt:

1
2
3
4
5
6
7
8
9
# 25 Punkt-Typen
png("punkttypen.png")
par(mar=c(0,4,0,0)+.25, cex=1.5)
plot(1, 1, type="n", ylim=c(-2, 25), xlim=c(0, 10), xaxt="n", xlab="", ylab="Punkttyp (pch)", las=1, lab=c(2,15,0))
abline(h=c(-2:25), lty=3, lwd=1, col="#cccccc")
for (typ in -2:25) {
  points(x=c(0:10), y=c(rep(typ,11)), pch=typ, bg="red")
}
dev.off()

Grafik-Parameter in R zeitweise verändern

R ist eine Programmiersprache, mit deren Hilfe man Statistiken berechnen und die Ergebnisse grafisch darstellen kann. Dabei kann man auch mehrere solcher Grafiken in eine einzige Datei (z.B. PDF-Datei) speichern.

Die Ausgabegeräte („output device“, z.B. PDF-Datei) haben voreingestellte Werte für z.B. die Rahmenbreite, Textfarben, Textgrößen, usw.. Manchmal möchte man dabei für einen einzigen Plot die Standard-Parameter des Ausgabegerätes verändern(sie auch: Dokumentation zu par() und WikiBooks-Artikel zu par()). Für weitere Plots sollen dann wiederum die Standard-Parameter verwendet werden. Dazu kann man die Parameter vor der Veränderung zwischenspeichern und im Anschluss wieder einsetzen.

Im folgenden Beispiel werden drei einfache Grafiken in eine gemeinsame PDF-Datei geplottet. Im zweiten Plot werden die Ränder, sowie die Ausrichtung der Beschriftungen verändert. Im dritten Plot werden dann wieder die Standard-Parameter verwendet:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Ausgabegerät setzen (hier: PDF-Datei)
pdf("plots.pdf")
 
# Plot mit Standard-Parametern
plot(
    x = 1, y = 1
    , xlab = "X-Achsenbeschriftung"
    , ylab = "Y-Achsenbeschriftung"
    , main = "Plot mit Standard-Parametern"
)
 
# Alle änderbaren Standardparameter speichern
original_parameter = par(no.readonly=TRUE)
 
# Plot mit geändertem Rahmen und linksbündigen Beschriftungen
par( mar = c(4,4,1,0) + 0.1 , adj = 0)
plot(
    x = 1, y = 1
    , xlab = "X-Achsenbeschriftung"
    , ylab = "Y-Achsenbeschriftung"
    , main = "Plot mit eigenen Parametern"
)
 
# Standard-Parameter einsetzen
par(original_parameter)
 
# Erneut mit Standard-Parametern plotten
plot(
    x = 1, y = 1
    , xlab = "X-Achsenbeschriftung"
    , ylab = "Y-Achsenbeschriftung"
    , main = "Plot mit Standard-Parametern"
)
 
# Ausgabegerät schließen (hier: Daten in PDF-Datei speichern)
dev.off()

Im oben stehenden Beispiel wurden all diejenigen Parameter zwischengespeichert, die auch tatsächlich geändert werden können. Parameter wie z.B. cin oder csi können zwar gelesen, aber nicht geändert werden. Um nur änderbare Parameter auszulesen, muss in der Funktion par() die Option no.readonly auf TRUE gesetzt werden. Ansonsten bekommt man folgende Fehlermeldung:

Warnmeldungen:
1: In par(original_parameter) : graphical parameter "cin" cannot be set
2: In par(original_parameter) : graphical parameter "cra" cannot be set
3: In par(original_parameter) : graphical parameter "csi" cannot be set
4: In par(original_parameter) : graphical parameter "cxy" cannot be set
5: In par(original_parameter) : graphical parameter "din" cannot be set

Anstatt alle änderbaren Parameter zwischen zu speichern, kann man sich auch nur eine Auswahl an Parametern merken:

12
13
# Auswahl an änderbaren Standardparametern speichern
original_parameter = par(c("mar", "adj"))

Die Änderung der Sprache klappt nicht bei Ubuntu?

Bei Ubuntu kann man mehrere Sprachen installieren. Dadurch werden sowohl das System, als auch viele Software-Tools in der gewünschten Sprache dargestellt. Diese Änderungen kannst du in den Systemeinstellungen im Bereich „Persönlich“ / „Sprachen“ vornehmen:

Bildschirmfoto vom 2013-08-16 09:50:16
Unter Ubuntu kannst Du mehrere Sprachpakete installieren.

Um die Sprache zu ändern, musst Du nur die gewünschte Sprache an die erste Stelle in der Sprach-Auflistung ziehen. Weitere Informationn dazu findest Du im UbuntuUsers Wiki.

Sollte beim nächsten Login immer noch die vorherige Sprache verwendet werden, ist es möglich, dass deine .profile-Datei die Änderung der Sprache verhindert. Das scheint besonders dann der Fall zu sein, wenn man mal die Ubuntu-Version 12.04 installiert hatte. Um das Problem zu beheben öffne deine .profile-Datei

gedit ~/.profile

und entferne/kommentiere diejenigen Befehle, welche die Konstanten für die Definition der Sprache setzten (bei mir war das System auf english eingestellt):

export LANGUAGE="en"
export LC_MESSAGES="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
export LC_COLLATE="en_US.UTF-8"

ändern zu:

#export LANGUAGE="en"
#export LC_MESSAGES="en_US.UTF-8"
#export LC_CTYPE="en_US.UTF-8"
#export LC_COLLATE="en_US.UTF-8"

Weitere Informationen gibt es im Blog von Christian Habermueller.