R Logo

Transluzente Polygone in R-Plots einzeichnen

Manchmal möchte man Bereiche einer Grafik (z.B. einen Meßbereich) farblich hervorheben. Das kann man z.B. durch Polygone erreichen. Wichtig ist dabei, dass keiner der Datenpunkte vollständig überdeckt wird. Entweder zeichnet man die Polygone vor dem plotten der Datenpunkte ein, oder man verwendet teilweise durchsichtige Polygone (transluzente Polygone), durch die die Datenpunkte immer noch zu sehen sind.

nerv_test

Diese Transluzenz erreicht man in R dadurch, dass man einen achtstelligen hexadezimalen RGB-Farbwert verwendet. Die ersten 6 Stellen sind wie gewohnt für die drei Farben Rot, Grün und Blau reserviert. Die letzten beiden Stellen bestimmen die Deckfraft der zuvor angegebenen Farbe. Der Wert „00“ steht dabei für „vollständig durchsichtig (Farbe unsichtbar)“ und „ff“ steht für „100% deckend (undurchsichtig)“.

Im folgenden Beispiel werden Daten (x, y) geplottet.

x = 1:100
y = x + runif(n=length(x), min=-5, max=+5)
# Simulierte Standardabweichung:
sd = 10 + runif(n=length(x), min=-1, max=+1)
plot(x,y, las=1)

Die Standardabweichung (sd) soll in diesem Beispiel nicht als Fehlerbalken, sondern als farbiger Bereich um die Kurve geplottet werden. Das ist besonders dann hilfreich, wenn man eine hohe Dichte an Meßpunkten hat. Dazu werden der Funktion polygon() die x und y-Koordinaten übergeben. Für den Bereich „zuzüglich Standardabweichung“ (oberhalb der Messwerte; y+sd) gehen wir vom kleinsten zum größten x-Wert (x); für den Bereich „abzüglich Standardabweichung“ (unterhalb der Messwerte; y-sd) gehen wir vom größten zum kleinsten x-Wert (rv(x), und damit auch rev(y-sd)). Wird beschreiben das Polygon also in einer Rechtskurve.

# Bereiche der simulierten Standardabweichung einzeichnen
polygon(
  x = c(x, rev(x))
  , y = c(y+sd, rev(y-sd))
  , col = "#cc000033"
)

Auf diese Weise kann man auch einfache Formen, wie z.B. ein Rechteck, einfügen:

# Rechteck einzeichnen
polygon(
  x = c(40, 40, 60, 60)
  , y = c(-10, 200, 200, -10)
  , col = "#0000cc33"
)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Bitte löse folgende Aufgabe: * Time limit is exhausted. Please reload CAPTCHA.