Die 455 benannten Farben von R (ohne die Graustufen gray0 bis gray100), sortiert nach Farbton.
Farben in R
Farbmodelle, benannte Farben und Paletten für wissenschaftliche Grafiken
Auf dieser Seite sammeln wir, was wir für Farben in R-Grafiken brauchen: wie Farben technisch beschrieben werden, welche Farbnamen R kennt und wie wir mit colorspace, RColorBrewer und weiteren Paketen Paletten für wissenschaftliche Grafiken auswählen, auch für ggplot2.
Jedes Farbfeld lässt sich anklicken; kopiert wird der passende R-Code, also Farbname, Hex-Code oder Palettenaufruf. Mit dem Auswahlfeld unten rechts sehen wir die ganze Seite so, wie Menschen mit Farbsehschwäche sie wahrnehmen.
Auf einen Blick
Farbe angeben
"steelblue" # Farbname
"#4682B4" # Hex-Code
rgb(70, 130, 180, maxColorValue = 255) # RGB
hsv(h = 0.576, s = 0.611, v = 0.706) # HSV (≈ steelblue)
hcl(h = 243, c = 54, l = 52) # HCL (≈ steelblue)Umrechnen und anpassen
col2rgb("steelblue") # Name/Hex -> RGB (0–255)
rgb2hsv(col2rgb("steelblue")) # RGB -> HSV
as(colorspace::hex2RGB("#4682B4"), "polarLUV") # Hex -> HCL
adjustcolor("steelblue", alpha.f = 0.5) # halb transparent
colorRampPalette(c("white", "steelblue"))(9) # interpolierenPaletten in Base R und colorspace
hcl.colors(7, "Blues 3") # Base R
palette.colors(palette = "Okabe-Ito") # Base R, für Kategorien
colorspace::qualitative_hcl(4, "Dark 3")
colorspace::sequential_hcl(7, "Blues 3")
colorspace::diverging_hcl(9, "Blue-Red 3")Weitere Pakete
RColorBrewer::brewer.pal(5, "Set2")
viridisLite::viridis(7, option = "mako")
scico::scico(7, palette = "batlow")
khroma::color("bright")(7) # Paul Tol
paletteer::paletteer_d("MetBrewer::Hokusai3") # über 2500 Palettenggplot2
scale_colour_discrete_qualitative(palette = "Dark 3") # colorspace
scale_fill_continuous_sequential(palette = "Blues 3") # colorspace
scale_fill_brewer(palette = "Set2")
scale_fill_viridis_c(option = "mako")
paletteer::scale_colour_paletteer_d("nord::aurora")
theme(palette.colour.discrete = "Okabe-Ito") # ab ggplot2 4.0Prüfen
p <- colorspace::qualitative_hcl(5, "Dark 3")
colorspace::swatchplot(p, cvd = TRUE) # mit Simulationen
colorspace::specplot(p) # Verlauf von H, C und L
colorspace::desaturate(p) # Graustufen
colorblindcheck::palette_check(p, plot = TRUE)
cols4all::c4a_gui() # Paletten vergleichenFarbmodelle
Ein Bildschirmpixel kennt nur drei Zahlen: wie stark sein roter, grüner und blauer Anteil leuchtet. Hex-Codes, HSV und HCL sind andere Schreibweisen für dieselben drei Zahlen. Wir sehen uns an, wie gut sie jeweils zu unserer Wahrnehmung passen.
RGB: Licht mischen
Bei RGB mischen wir Rot, Grün und Blau additiv: Je mehr Licht, desto heller wird die Farbe. Rot und Grün ergeben Gelb, alle drei mit voller Intensität ergeben Weiß, alle drei aus ergeben Schwarz. Jeder Kanal hat 256 Stufen (0 bis 255, also 8 Bit); zusammen sind das gut 16,7 Millionen Farben.
In R geben wir die Werte standardmäßig zwischen 0 und 1 an. Wenn wir lieber mit 0 bis 255 arbeiten, setzen wir maxColorValue = 255. Als Ergebnis erhalten wir immer einen Hex-Code.
rgb(1, 0.5, 0) # "#FF8000"
rgb(255, 128, 0, maxColorValue = 255) # "#FF8000"
col2rgb("orange") # zurück: 255, 165, 0Rot + Grün = Gelb, Grün + Blau = Cyan, Rot + Blau = Magenta, alle drei = Weiß
Hex-Codes: RGB in HTML-Schreibweise
Die aus HTML und CSS bekannte Schreibweise #RRGGBB ist RGB im Hexadezimalsystem. Jeder Kanal bekommt zwei Stellen mit den Ziffern 0–9 und A–F; 00 steht für 0, FF für 16 · 15 + 15 = 255. R gibt Farben intern immer in dieser Form zurück.
14 · 16 + 4 = 228
9 · 16 + 5 = 149
10 · 16 + 5 = 165
Mit zwei weiteren Stellen legen wir die Deckkraft (Alpha) fest: #RRGGBBAA, von 00 (durchsichtig) bis FF (deckend). So liefert adjustcolor("steelblue", alpha.f = 0.5) den Code "#4682B480".
R verwendet die X11-Farbliste, Webbrowser die CSS-Liste. Beide kennen teils dieselben Namen für verschiedene Farben: "green" ist in R #00FF00, in CSS #008000; "gray" ist in R #BEBEBE, in CSS #808080. Wenn wir Farben zwischen R und Web austauschen, nehmen wir deshalb Hex-Codes.
HSV: Farbkreis statt Würfel
HSV beschreibt RGB-Farben mit drei anschaulicheren Größen: Farbton (hue, Position auf dem Farbkreis), Sättigung (saturation, von grau bis rein) und Hellwert (value, von schwarz bis zur vollen Intensität). In R liegen alle drei zwischen 0 und 1, auch der Farbton: h = 0.5 entspricht 180°.
hsv(h = seq(0, 1, length.out = 25), s = 1, v = 1)hsv(h = 0.6, s = seq(0, 1, length.out = 11), v = 1)hsv(h = 0.6, s = 1, v = seq(0, 1, length.out = 11))HSV ist aber nur eine Umrechnung des RGB-Würfels und kein Modell unserer Wahrnehmung. Farben mit gleichem s und v wirken deshalb unterschiedlich hell: Reines Gelb nehmen wir viel heller wahr als reines Blau. Auf HSV beruhen rainbow(), heat.colors() und die anderen klassischen Paletten von R.
hsv(h = 0.6, s = 1, v = 1) # "#0066FF"
rgb2hsv(col2rgb("orange")) # zurück nach HSVHCL: Farben, wie wir sie sehen
HCL (hue, chroma, luminance) beruht auf dem CIELUV-Farbraum, der aus Experimenten zur menschlichen Farbwahrnehmung abgeleitet ist. Die drei Achsen können wir unabhängig voneinander verändern:
- Farbton
h: Winkel von 0 bis 360° (etwa 0 Rot, 120 Grün, 240 Blau) - Buntheit
c(Chroma): 0 ist grau, nach oben offen - Luminanz
l: wahrgenommene Helligkeit von 0 (schwarz) bis 100 (weiß)
Farben mit gleichem l nehmen wir als gleich hell wahr, und gleich große Schritte wirken annähernd gleich groß. Deshalb bauen wir Paletten am besten in HCL: Bei qualitativen Paletten ändern wir nur den Farbton, bei sequentiellen vor allem die Luminanz (Zeileis u. a. 2009).
hcl(h = seq(0, 360, length.out = 25), c = 50, l = 70)hcl(h = 250, c = seq(0, 60, length.out = 11), l = 50)hcl(h = 250, c = 20, l = seq(10, 95, length.out = 11))Nicht jede Kombination können wir am Bildschirm darstellen. Wie viel Buntheit möglich ist, hängt von Farbton und Luminanz ab: Helles Gelb kann sehr bunt sein, helles Blau nicht. Die Tabelle zeigt alle Kombinationen mit c = 50; schraffierte Felder liegen außerhalb des RGB-Farbraums. hcl() schneidet solche Farben standardmäßig zurecht (fixup = TRUE), mit fixup = FALSE erhalten wir NA. Die größtmögliche Buntheit liefert colorspace::max_chroma(h, l).
HSV und HCL im Vergleich
Beide Kreise zeigen den Farbton von 0 bis 360°. Daneben stehen jeweils dieselben Farben in Graustufen, umgerechnet mit colorspace::desaturate(); so sehen wir, wie hell die Farben wirken. Im HSV-Kreis springt die Helligkeit (Gelb und Cyan hell, Blau dunkel), im HCL-Kreis bleibt sie gleich. Ein HSV-Regenbogen hebt deshalb ungewollt einzelne Farben hervor, eine HCL-Palette nicht.
Gleiche Sättigung und gleicher Hellwert, aber sehr unterschiedliche Helligkeit
Gleiche Luminanz: alle Farbtöne wirken gleich hell
Ausprobieren
Wir bewegen die Regler und wechseln zwischen den Modellen. Darunter steht dieselbe Farbe in allen Schreibweisen; ein Klick auf eine Zeile kopiert den Code.
Der Farbmischer braucht JavaScript.
Umrechnen
| Von → nach | Funktion |
|---|---|
| Name oder Hex → RGB | col2rgb(x) (Werte 0–255, mit alpha = TRUE auch die Deckkraft) |
| RGB → Hex | rgb(r, g, b, maxColorValue = 255) |
| RGB → HSV | rgb2hsv(r, g, b) (erwartet standardmäßig 0–255) |
| HSV → Hex | hsv(h, s, v) |
| HCL → Hex | hcl(h, c, l) oder mit colorspace hex(polarLUV(l, c, h)) |
| Hex → HCL | mit colorspace as(hex2RGB(x), "polarLUV") |
| Transparenz | adjustcolor(x, alpha.f = 0.5) oder colorspace::adjust_transparency(x, alpha = 0.5) |
| Zwischenfarben | colorRampPalette(c("white", "steelblue"))(n) |
col2rgb("steelblue") [,1]
red 70
green 130
blue 180
rgb2hsv(70, 130, 180) [,1]
h 0.5757576
s 0.6111111
v 0.7058824
as(hex2RGB("#4682B4"), "polarLUV") L C H
[1,] 52.46539 54.48801 242.5573
adjustcolor("steelblue", alpha.f = 0.5)[1] "#4682B480"
Benannte Farben
colors() liefert alle 657 Farbnamen, die R kennt; sie stammen aus der X11-Farbliste. Viele Farben gibt es zusätzlich in vier Abstufungen ("tomato1" bis "tomato4"), und Grau kommt in beiden Schreibweisen gray und grey vor. Ohne Dubletten bleiben 502 verschiedene Farben (colors(distinct = TRUE)).
Graustufen
gray0 (schwarz) bis gray100 (weiß), identisch mit grey0 bis grey100. Dazu kommen "black", "white", "gray", "dimgray", "darkgray", "lightgray" und weitere, die wir unten bei den übrigen Namen finden.
Alle übrigen Farbnamen
Wir sortieren nach Farbton; Farben mit sehr geringer Buntheit (Weiß-, Grau- und Beigetöne) stehen am Ende. Über das Suchfeld finden wir Namen oder Hex-Codes, ein Klick kopiert den Namen mit Anführungszeichen.
Eingebaute Paletten in Base R
Die klassischen Paletten aus grDevices erzeugen n Farben entlang eines festen Verlaufs:
rainbow(n)heat.colors(n)terrain.colors(n)topo.colors(n)cm.colors(n)gray.colors(n)hcl.colors(n, "viridis")rainbow(), heat.colors(), terrain.colors(), topo.colors() und cm.colors() beruhen auf HSV. Ihre Helligkeit schwankt stark, und bei Farbsehschwäche sind viele Farben kaum zu unterscheiden. Für neue Grafiken nehmen wir deshalb besser hcl.colors() (seit R 3.6 in Base R) oder die Paletten aus colorspace.
Für Kategorien gibt es seit R 4.0 palette.colors(). Die voreingestellte Palette "Okabe-Ito" können auch Menschen mit Farbsehschwäche gut unterscheiden. palette() zeigt oder setzt die Standardfarben, die Base-Grafiken bei col = 1, 2, 3, … verwenden; palette.pals() listet alle Namen.
palette.colors(palette = "R3")palette.colors(palette = "R4")palette.colors(palette = "ggplot2")palette.colors(palette = "Okabe-Ito")palette.colors(palette = "Accent")palette.colors(palette = "Dark 2")palette.colors(palette = "Paired")palette.colors(palette = "Pastel 1")palette.colors(palette = "Pastel 2")palette.colors(palette = "Set 1")palette.colors(palette = "Set 2")palette.colors(palette = "Set 3")palette.colors(palette = "Tableau 10")palette.colors(palette = "Classic Tableau")palette.colors(palette = "Polychrome 36")palette.colors(palette = "Alphabet")colorspace
colorspace von Achim Zeileis und Kolleg:innen (Zeileis u. a. 2020) baut Paletten im HCL-Raum. Dadurch steuern wir Helligkeit und Buntheit gezielt: Qualitative Paletten haben überall dieselbe Luminanz, sequentielle werden gleichmäßig heller. Wir installieren das Paket mit install.packages("colorspace").
Welcher Palettentyp passt?
Qualitativ
Für Kategorien ohne Rangfolge, etwa Gruppen oder Studiengänge. Nur der Farbton wechselt, Helligkeit und Buntheit bleiben gleich.
qualitative_hcl(n, "Dark 3")Sequentiell
Für geordnete oder numerische Werte von niedrig nach hoch. Die Luminanz ändert sich gleichmäßig in eine Richtung.
sequential_hcl(n, "Blues 3")Divergierend
Für Werte mit einer sinnvollen Mitte, etwa 0, einem Mittelwert oder einer neutralen Antwort. Zwei Farbtöne, die Mitte ist hell.
diverging_hcl(n, "Blue-Red 3")Divergierend, flexibel
Wie divergierend, aber beide Seiten dürfen unterschiedlich aufgebaut sein. Enthält HCL-Nachbauten bekannter Paletten.
divergingx_hcl(n, "RdBu")Alle vordefinierten Paletten
Ein Klick auf den Namen kopiert den Aufruf, ein Klick auf ein Farbfeld den Hex-Code. Die meisten dieser Paletten erhalten wir auch in Base R über hcl.colors(n, palette); hcl.pals() listet die Namen.
Qualitativ9 Paletten mit qualitative_hcl()
Sequentiell, ein Farbton11 Paletten mit sequential_hcl()
Sequentiell, mehrere Farbtöne59 Paletten mit sequential_hcl()
Divergierend18 Paletten mit diverging_hcl()
Divergierend, flexibel19 Paletten mit divergingx_hcl()
Eigene Paletten
Jede vordefinierte Palette ist nur ein Satz von HCL-Parametern. Wir können die Parameter direkt angeben oder einzelne Werte einer vorhandenen Palette überschreiben (h1, h2, c1, c2, l1, l2, p1, p2, cmax):
qualitative_hcl(5, h = c(0, 288), c = 60, l = 70)sequential_hcl(7, h = 260, c = c(80, 10), l = c(30, 95), power = 1.5)diverging_hcl(7, h = c(260, 0), c = 80, l = c(30, 95), power = 1.5)sequential_hcl(7, palette = "Blues 3", l2 = 80)Interaktiv stellen wir Paletten mit choose_palette() (Tcl/Tk-Fenster), hclwizard() (Shiny-App) oder im Browser unter hclwizard.org zusammen.
Funktionen im Überblick
| Funktion | Zweck |
|---|---|
qualitative_hcl(n, palette) |
qualitative Palette |
sequential_hcl(n, palette) |
sequentielle Palette |
diverging_hcl(n, palette) |
divergierende Palette |
divergingx_hcl(n, palette) |
divergierende Palette mit unabhängigen Hälften |
hcl_palettes(type, plot = TRUE) |
vordefinierte Paletten auflisten und zeichnen |
swatchplot(..., cvd = TRUE) |
Farben als Farbfelder zeichnen, auf Wunsch mit Simulationen |
specplot(x) |
Verlauf von H, C und L entlang einer Palette |
hclplot(x) |
Palette im HCL-Raum darstellen |
demoplot(x, type) |
Palette in einer Beispielgrafik testen ("map", "heatmap", "bar", …) |
choose_palette(), hclwizard() |
Paletten interaktiv zusammenstellen |
lighten(), darken() |
Farben in HCL aufhellen oder abdunkeln |
desaturate(x, amount) |
Buntheit entfernen; zeigt die wahrgenommene Helligkeit |
deutan(), protan(), tritan() |
Farbsehschwäche simulieren |
cvd_emulator() |
eigene Grafik hochladen und Farbsehschwäche simulieren (Shiny-App) |
adjust_transparency(x, alpha) |
Deckkraft setzen |
max_chroma(h, l) |
größte darstellbare Buntheit |
So wirken die Hilfsfunktionen auf eine Palette p:
p <- qualitative_hcl(5, "Dark 3")lighten(p, 0.4)darken(p, 0.3)desaturate(p, 0.5)desaturate(p)deutan(p)protan(p)tritan(p)colorspace mit ggplot2
Alle ggplot2-Skalen von colorspace folgen einem Schema aus drei Teilen. Statt colour können wir auch color schreiben.
| Palettentyp | diskret (Faktor) | kontinuierlich | gebinnt |
|---|---|---|---|
| qualitativ | scale_colour_discrete_qualitative() |
– | – |
| sequentiell | scale_colour_discrete_sequential() |
scale_colour_continuous_sequential() |
scale_colour_binned_sequential() |
| divergierend | scale_colour_discrete_diverging() |
scale_colour_continuous_diverging() |
scale_colour_binned_diverging() |
| divergierend, flexibel | scale_colour_discrete_divergingx() |
scale_colour_continuous_divergingx() |
scale_colour_binned_divergingx() |
Wichtige Argumente:
| Argument | Bedeutung |
|---|---|
palette |
Name der HCL-Palette, z. B. "Blues 3" |
rev |
Richtung der Palette umkehren (TRUE / FALSE) |
begin, end |
nur einen Ausschnitt der Palette verwenden (zwischen 0 und 1) |
mid |
Mittelpunkt bei divergierenden kontinuierlichen Skalen |
nmax, order |
diskrete Skalen: Palette mit nmax Farben erzeugen und mit order daraus auswählen |
h1, c1, l1, … |
einzelne HCL-Parameter der Palette überschreiben |
aesthetics |
z. B. c("colour", "fill"), um beide auf einmal zu setzen |
name, breaks, labels, na.value |
die üblichen Argumente aller ggplot2-Skalen |
ggplot(mpg, aes(displ, hwy, colour = class)) +
geom_point(size = 2.5, alpha = 0.85) +
scale_colour_discrete_qualitative(palette = "Dark 3") +
labs(x = "Hubraum (l)", y = "Meilen pro Gallone (Autobahn)",
colour = "Fahrzeugklasse")
ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_raster() +
scale_fill_continuous_sequential(palette = "YlGnBu") +
coord_cartesian(expand = FALSE) +
labs(x = "Wartezeit (min)", y = "Eruptionsdauer (min)", fill = "Dichte")
gitter <- expand.grid(x = seq(-2, 2, length.out = 81),
y = seq(-2, 2, length.out = 81))
gitter$z <- with(gitter, x * exp(-x^2 - y^2))
ggplot(gitter, aes(x, y, fill = z)) +
geom_raster() +
scale_fill_continuous_diverging(palette = "Blue-Red 3", mid = 0) +
coord_fixed(expand = FALSE)
ggplot(mpg, aes(displ, hwy, colour = cty)) +
geom_point(size = 2.5) +
scale_colour_binned_sequential(palette = "Plasma") +
labs(x = "Hubraum (l)", y = "Meilen pro Gallone (Autobahn)",
colour = "Stadt (mpg)")
Paletten können wir auch von Hand an die allgemeinen ggplot2-Skalen übergeben:
scale_colour_manual(values = qualitative_hcl(3, "Dark 3")) # diskret
scale_fill_manual(values = c(setosa = "#E495A5", # feste Zuordnung
versicolor = "#ABB065",
virginica = "#39BEB1"))
scale_fill_gradientn(colours = sequential_hcl(7, "Mint")) # kontinuierlich
scale_fill_gradient2(low = "steelblue", mid = "white", # divergierend
high = "firebrick", midpoint = 0)
scale_fill_stepsn(colours = sequential_hcl(5, "Purples 3")) # gebinntRColorBrewer
Die Paletten von ColorBrewer hat die Kartografin Cynthia Brewer für Landkarten entwickelt (Harrower und Brewer 2003). Die 35 Paletten sind von Hand abgestimmt und liegen nur in festen Längen vor: mindestens 3 Farben, höchstens 8 bis 12 je nach Palette. Wir installieren das Paket mit install.packages("RColorBrewer").
Paletten
Ein Klick auf den Namen kopiert brewer.pal() mit der größtmöglichen Anzahl Farben. ◐ markiert Paletten, die laut brewer.pal.info auch bei Farbsehschwäche funktionieren.
Sequentiell
Divergierend
Qualitativ
Funktionen
| Funktion | Zweck |
|---|---|
brewer.pal(n, name) |
n Farben einer Palette (3 ≤ n ≤ maxcolors) |
brewer.pal.info |
Tabelle mit maxcolors, category und colorblind |
display.brewer.all() |
alle Paletten zeichnen; type = "seq", "div" oder "qual", colorblindFriendly = TRUE |
display.brewer.pal(n, name) |
eine Palette zeichnen |
colorRampPalette(brewer.pal(9, "Blues"))(25) |
mehr Farben als vorgesehen durch Interpolation |
Für n < 3 erhalten wir eine Warnung und trotzdem drei Farben, für n > maxcolors ebenfalls eine Warnung und nur maxcolors Farben. Brauchen wir mehr, interpolieren wir mit colorRampPalette() oder nehmen eine HCL-Palette: colorspace enthält HCL-Nachbauten vieler ColorBrewer-Paletten, etwa sequential_hcl(n, "YlGnBu") oder divergingx_hcl(n, "RdBu"), und erzeugt beliebig viele Farben.
RColorBrewer mit ggplot2
Die Skalen gehören zu ggplot2 selbst; RColorBrewer müssen wir dafür nicht laden.
| Funktion | Variable | Hinweis |
|---|---|---|
scale_colour_brewer(), scale_fill_brewer() |
diskret | höchstens maxcolors Stufen |
scale_colour_distiller(), scale_fill_distiller() |
kontinuierlich | interpoliert zwischen den Palettenfarben |
scale_colour_fermenter(), scale_fill_fermenter() |
gebinnt | eine Farbe pro Klasse |
Wichtige Argumente sind palette (Name oder Nummer), type ("seq", "div", "qual") und direction (1 oder -1). Bei distiller und fermenter ist direction = -1 voreingestellt; die Palette läuft dort also umgekehrt zu brewer.pal().
ggplot(mpg, aes(class, fill = drv)) +
geom_bar() +
scale_fill_brewer(palette = "Set2") +
labs(x = NULL, y = "Anzahl", fill = "Antrieb")
ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_raster() +
scale_fill_distiller(palette = "YlGnBu", direction = 1) +
coord_cartesian(expand = FALSE) +
labs(x = "Wartezeit (min)", y = "Eruptionsdauer (min)", fill = "Dichte")
# gitter: siehe Beispiel „Divergierend“ bei colorspace
ggplot(gitter, aes(x, y, fill = z)) +
geom_raster() +
scale_fill_fermenter(palette = "RdBu", limits = c(-0.45, 0.45),
breaks = seq(-0.4, 0.4, by = 0.2)) +
coord_fixed(expand = FALSE)
Weitere Palettenpakete
Neben colorspace und RColorBrewer gibt es Dutzende Pakete mit fertigen Paletten. Für wissenschaftliche Grafiken achten wir bei der Auswahl auf vier Punkte:
- Gleichmäßige Helligkeit: Bei sequentiellen und divergierenden Paletten soll die Luminanz gleichmäßig zu- oder abnehmen. Sonst sehen wir Grenzen, wo in den Daten keine sind (Crameri u. a. 2020).
- Farbsehschwäche: Etwa 8 % der Männer und 0,5 % der Frauen nordeuropäischer Herkunft haben eine Rot-Grün-Sehschwäche. Auch für sie muss die Palette unterscheidbar bleiben.
- Graustufen: Wird die Grafik schwarz-weiß gedruckt, sollen die Abstufungen erhalten bleiben.
- Anzahl der Farben: Qualitative Paletten haben eine feste Länge. Mehr als etwa acht Kategorien können wir ohnehin kaum sicher auseinanderhalten.
Mit dem Auswahlfeld unten rechts prüfen wir alle Paletten auf dieser Seite direkt: Es simuliert Deuteranopie, Protanopie, Tritanopie oder einen Graustufendruck. Die Simulation beruht wie colorspace::deutan() auf dem Modell von Machado u. a. (2009).
| Paket | Schwerpunkt | bei Farbsehschwäche |
|---|---|---|
| viridisLite | wahrnehmungsgleichmäßige Verläufe, in ggplot2 eingebaut | geeignet |
| scico | Scientific Colour Maps von Fabio Crameri | geeignet |
| cmocean | Farbskalen für die Ozeanografie | nicht eigens geprüft |
| khroma | Paletten von Paul Tol, Okabe-Ito | geeignet |
| ggokabeito | Okabe-Ito als ggplot2-Skala | geeignet |
| rcartocolor | CARTO-Paletten für Karten | teilweise, im Paket markiert |
| ggsci | Paletten von Fachzeitschriften und Software | nicht geprüft |
| ggthemes | Tableau, Okabe-Ito und Stile bekannter Programme | teilweise |
| ggprism | Paletten aus GraphPad Prism | nicht geprüft |
| MetBrewer | Gemälde aus dem Metropolitan Museum of Art | teilweise, im Paket markiert |
| NatParksPalettes | Nationalparks | teilweise, im Paket markiert |
| wesanderson | Filme von Wes Anderson | nicht geprüft |
| Polychrome | sehr viele unterscheidbare Farben | – |
| paletteer | über 2500 Paletten aus mehr als 70 Paketen mit einer Schnittstelle | – |
| cols4all | Paletten vergleichen und bewerten | mit Bewertung |
Wissenschaftliche Farbskalen
Für Werte auf einer kontinuierlichen Skala, etwa Temperaturen, Dichten oder Korrelationen, haben sich Paletten durchgesetzt, deren Helligkeit gleichmäßig verläuft. Sie bleiben auch bei Farbsehschwäche und in Graustufen lesbar.
viridis
Die viridis-Familie wurde ursprünglich für die Python-Bibliothek matplotlib entwickelt. Wir brauchen dafür kein zusätzliches Paket: viridisLite wird mit ggplot2 installiert, und ggplot2 bringt eigene Skalen mit. cividis ist eigens für Farbsehschwäche optimiert (Nuñez u. a. 2018). turbo ist eine verbesserte Regenbogenpalette, aber nicht gleichmäßig hell; wir nehmen sie nur, wenn wir sehr viele Stufen unterscheiden müssen.
Acht OptionenviridisLite::viridis(), in ggplot2 über option
viridisLite::viridis(7, option = "mako") # oder option = "G"
scale_colour_viridis_d(option = "plasma") # diskret
scale_fill_viridis_c(option = "magma") # kontinuierlich
scale_fill_viridis_b(option = "cividis") # gebinnt
hcl.colors(7, "viridis") # HCL-Näherung in Base Rscico
scico enthält die Scientific Colour Maps von Fabio Crameri (Crameri u. a. 2020). Sie sind wahrnehmungsgleichmäßig, für Farbsehschwäche geeignet und in Graustufen lesbar. Neben sequentiellen und divergierenden Paletten gibt es zyklische (Endung O), etwa für Winkel oder Tageszeiten, und seit Version 1.5 kategoriale Varianten.
Sequentiell
Divergierend
Mehrfach sequentiell
Zyklisch
Kategorialcategorical = TRUE
scico::scico(7, palette = "batlow")
scico::scico(5, palette = "batlow", categorical = TRUE)
scico::scico_palette_names() # alle Namen
scico::scale_fill_scico(palette = "vik", midpoint = 0) # kontinuierlich
scico::scale_colour_scico_d(palette = "batlow") # diskretcmocean
cmocean enthält die Farbskalen von Kristen Thyng und Kolleg:innen für die Ozeanografie (Thyng u. a. 2016). Die Namen sagen, wofür eine Skala gedacht ist: thermal für Temperatur, haline für Salzgehalt, deep für Wassertiefe, balance für Abweichungen um null.
Sequentiell
Divergierend
Zyklisch
Mehrteilig
cmocean::cmocean("thermal")(7) # liefert eine Funktion
cmocean::scale_fill_cmocean(name = "deep") # kontinuierlich
cmocean::scale_colour_cmocean(name = "haline", discrete = TRUE)Paletten für Farbsehschwäche
Für Kategorien brauchen wir Farben, die sich im Farbton deutlich unterscheiden und trotzdem bei Farbsehschwäche auseinanderzuhalten sind.
Okabe-Ito
Die Farben von Masataka Okabe und Kei Ito (Okabe und Ito [2002] 2008) gelten als Standard für Kategorien. Seit R 4.0 sind sie in Base R enthalten. Schwarz steht an erster Stelle; für Datenpunkte lassen wir es oft weg.
palette.colors(palette = "Okabe-Ito") # Base R ab 4.0
palette.colors(palette = "Okabe-Ito")[-1] # ohne Schwarz
scale_colour_manual(values = unname(palette.colors(palette = "Okabe-Ito")[-1]))
ggokabeito::scale_colour_okabe_ito() # eigenes Paket
theme(palette.colour.discrete = "Okabe-Ito") # ggplot2 ab 4.0Paul Tol: khroma
Paul Tol hat am niederländischen Institut für Weltraumforschung (SRON) Farbschemata entwickelt, die bei Farbsehschwäche und im Druck funktionieren (Tol 2021). Das Paket khroma stellt sie bereit, zusammen mit Okabe-Ito und den Paletten von Crameri.
Qualitativ
Sequentiell
Weitere
bright <- khroma::color("bright") # liefert eine Funktion
bright(7)
khroma::info() # alle Paletten mit Typ und Höchstzahl
khroma::scale_colour_bright() # Schema: scale_colour_<palette>()
khroma::scale_fill_muted()CARTO: rcartocolor
Die Paletten des Kartendienstes CARTO wurden für thematische Karten entworfen. Safe ist die qualitative Palette für Farbsehschwäche. ◐ markiert alle Paletten, die laut metacartocolors dafür geeignet sind.
Qualitativ
Sequentiell
Weitere
rcartocolor::carto_pal(7, "Safe")
rcartocolor::display_carto_all(colorblind_friendly = TRUE)
rcartocolor::scale_colour_carto_d(palette = "Safe")
rcartocolor::scale_fill_carto_c(palette = "Burg")Zeitschriften und Software
Manche Zeitschriften und Programme haben eigene Farbschemata. Mit ggsci, ggthemes und ggprism übernehmen wir sie in ggplot2, etwa damit eine Grafik zum Stil einer Zielzeitschrift passt. Auf Farbsehschwäche sind diese Paletten meist nicht abgestimmt; wir prüfen sie deshalb, bevor wir sie verwenden.
ggsci
Qualitativ
Weitere
ggsci::pal_npg("nrc")(10) # Nature Publishing Group
ggsci::pal_lancet("lanonc")(9) # The Lancet
ggsci::pal_jama()(7) # JAMA
ggsci::scale_colour_npg() # Schema: scale_colour_<name>()
ggsci::scale_fill_nejm()ggthemes: Tableau
Qualitativ
ggthemes::scale_colour_tableau() # palette = "Tableau 10"
ggthemes::scale_colour_tableau(palette = "Tableau 20")
ggthemes::scale_colour_colorblind() # Okabe-Ito
ggthemes::scale_fill_gradient_tableau() # sequentiellggprism
Qualitativ
Sequentiell
lengths(ggprism::ggprism_data$colour_palettes) # alle Paletten und ihre Länge
ggprism::scale_colour_prism(palette = "colors")
ggprism::scale_fill_prism(palette = "floral")Kunst, Film und Natur
Diese Paletten sind nach Gemälden, Filmen oder Landschaften zusammengestellt. Sie eignen sich gut für Präsentationen und Poster. Für Publikationen prüfen wir sie auf Farbsehschwäche; MetBrewer und NatParksPalettes markieren geeignete Paletten selbst; auf dieser Seite stehen sie mit ◐.
MetBrewer
Qualitativ
MetBrewer::met.brewer("Hokusai3", 5)
MetBrewer::met.brewer("Hiroshige", 100, type = "continuous")
MetBrewer::colorblind_palettes # geeignete Paletten
MetBrewer::scale_colour_met_d("Archambault")
MetBrewer::scale_fill_met_c("Hiroshige")wesanderson
Für wesanderson gibt es keine eigenen ggplot2-Skalen; wir übergeben die Farben an scale_*_manual() oder scale_*_gradientn().
Qualitativ
wesanderson::wes_palette("Zissou1") # alle Farben
wesanderson::wes_palette("Zissou1", 100, type = "continuous") # interpoliert
scale_fill_manual(values = wesanderson::wes_palette("Darjeeling1", n = 3))
scale_fill_gradientn(colours = wesanderson::wes_palette("Zissou1", 100, type = "continuous"))Weitere Sammlungen
NatParksPalettesNationalparks
nordnordische Landschaften und die Group of Seven
MoMAColorsMuseum of Modern Art, nur über GitHub
PNWColorspazifischer Nordwesten, nur über GitHub
NatParksPalettes::natparks.pals("Acadia", 5)
NatParksPalettes::scale_colour_natparks_d("Acadia")
nord::nord("aurora", 5)
nord::scale_colour_nord("aurora")
subset(paletteer::palettes_d_names, package == "MoMAColors") # Namen nachschlagenViele Kategorien
Für sehr viele Kategorien, etwa Zelltypen oder Gene, gibt es Paletten mit möglichst unterscheidbaren Farben. Ab etwa zehn Farben können wir die Kategorien aber kaum noch sicher zuordnen. Oft ist es besser, Kategorien zusammenzufassen, Linien direkt zu beschriften oder Teilgrafiken mit facet_wrap() zu zeichnen.
Polychrome
Polychrome::glasbey.colors(32)
Polychrome::alphabet.colors(26)
Polychrome::kelly.colors(22)
Polychrome::createPalette(30, seedcolors = c("#FF0000", "#00FF00", "#0000FF"))paletteer: eine Schnittstelle für alle
paletteer sammelt über 2500 diskrete und gut 300 kontinuierliche Paletten aus mehr als 70 Paketen. Wir sprechen jede Palette mit "paket::palette" an. Die Übersichten oben stammen aus paletteer; ein Klick auf einen Namen kopiert den passenden Aufruf. Diskrete Paletten liegen in paletteer selbst vor, für kontinuierliche muss das Quellpaket installiert sein.
| Funktion | Zweck |
|---|---|
paletteer_d("MetBrewer::Hokusai3") |
diskrete Palette fester Länge |
paletteer_d("MetBrewer::Hokusai3", 9, type = "continuous") |
diskrete Palette, auf 9 Farben interpoliert |
paletteer_c("scico::batlow", 7) |
kontinuierliche Palette |
paletteer_dynamic("cartography::green.pal", 5) |
Palette, deren Farben von n abhängen |
palettes_d_names, palettes_c_names |
Tabellen mit allen Paket- und Palettennamen |
scale_colour_paletteer_d(), _c(), _binned() |
ggplot2-Skalen; ebenso scale_fill_paletteer_…() |
Paletten prüfen
Bevor wir eine Palette verwenden, prüfen wir, ob sie in Graustufen und bei Farbsehschwäche funktioniert.
| Funktion | Zweck |
|---|---|
colorspace::swatchplot(p, cvd = TRUE) |
Palette neben Simulationen und Graustufen |
colorspace::specplot(p) |
Verlauf von Farbton, Buntheit und Luminanz |
colorspace::deutan(p), protan(p), tritan(p), desaturate(p) |
einzelne Simulationen |
colorspace::cvd_emulator() |
eigene Grafik hochladen und simulieren (Shiny-App) |
colorblindcheck::palette_check(p, plot = TRUE) |
kleinste Farbabstände je Sehschwäche als Tabelle und Grafik |
cols4all::c4a_gui() |
Paletten vergleichen, mit Bewertung für Farbsehschwäche |
colorblindr::cvd_grid(plot) |
fertige ggplot2-Grafik simulieren (nur auf GitHub: clauswilke/colorblindr) |
Weitere Paletten mit ggplot2
| Paket | diskret | kontinuierlich | gebinnt |
|---|---|---|---|
| ggplot2 (viridis) | scale_colour_viridis_d() |
scale_colour_viridis_c() |
scale_colour_viridis_b() |
| scico | scale_colour_scico_d() |
scale_colour_scico() |
– |
| cmocean | scale_colour_cmocean(discrete = TRUE) |
scale_colour_cmocean() |
– |
| khroma | scale_colour_bright() u. a. |
je nach Palette | – |
| ggokabeito | scale_colour_okabe_ito() |
– | – |
| rcartocolor | scale_colour_carto_d() |
scale_colour_carto_c() |
– |
| ggthemes | scale_colour_tableau() |
scale_colour_gradient_tableau() |
– |
| ggsci | scale_colour_npg() u. a. |
scale_colour_gsea() |
– |
| ggprism | scale_colour_prism() |
– | – |
| MetBrewer | scale_colour_met_d() |
scale_colour_met_c() |
– |
| NatParksPalettes | scale_colour_natparks_d() |
scale_colour_natparks_c() |
– |
| nord | scale_colour_nord() |
scale_colour_nord(discrete = FALSE) |
– |
| wesanderson | scale_colour_manual() |
scale_colour_gradientn() |
– |
| cols4all | scale_colour_discrete_c4a_cat() |
scale_colour_continuous_c4a_seq() |
scale_colour_binned_c4a_seq() |
| paletteer | scale_colour_paletteer_d() |
scale_colour_paletteer_c() |
scale_colour_paletteer_binned() |
ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +
geom_raster() +
scale_fill_viridis_c(option = "mako") +
coord_cartesian(expand = FALSE) +
labs(x = "Wartezeit (min)", y = "Eruptionsdauer (min)", fill = "Dichte")
# gitter: siehe Beispiel „Divergierend“ bei colorspace
ggplot(gitter, aes(x, y, fill = z)) +
geom_raster() +
scico::scale_fill_scico(palette = "vik", midpoint = 0) +
coord_fixed(expand = FALSE)
ggplot(mpg, aes(displ, hwy, colour = drv)) +
geom_point(size = 2.5) +
khroma::scale_colour_bright() +
labs(x = "Hubraum (l)", y = "Meilen pro Gallone (Autobahn)", colour = "Antrieb")
ggplot(mpg, aes(class, fill = drv)) +
geom_bar() +
ggsci::scale_fill_npg() +
labs(x = NULL, y = "Anzahl", fill = "Antrieb")
ggplot(mpg, aes(class, fill = drv)) +
geom_bar() +
MetBrewer::scale_fill_met_d("Hokusai3") +
labs(x = NULL, y = "Anzahl", fill = "Antrieb")
ggplot(mpg, aes(class, fill = drv)) +
geom_bar() +
scale_fill_manual(values = wesanderson::wes_palette("Darjeeling1", n = 3)) +
labs(x = NULL, y = "Anzahl", fill = "Antrieb")
ggplot(mpg, aes(displ, hwy, colour = drv)) +
geom_point(size = 2.5) +
paletteer::scale_colour_paletteer_d("nord::aurora") +
labs(x = "Hubraum (l)", y = "Meilen pro Gallone (Autobahn)", colour = "Antrieb")
Standardpalette festlegen
Seit ggplot2 4.0 legen wir Standardpaletten über das Theme fest. Mit theme_set() gilt das für alle folgenden Grafiken eines Dokuments:
theme_set(
theme_minimal() +
theme(palette.colour.discrete = "Okabe-Ito",
palette.fill.discrete = "Okabe-Ito",
palette.colour.continuous = viridisLite::viridis(7),
palette.fill.continuous = viridisLite::viridis(7))
)In älteren Versionen von ggplot2 setzen wir dafür Optionen:
options(
ggplot2.discrete.colour = palette.colors(palette = "Okabe-Ito")[-1],
ggplot2.discrete.fill = palette.colors(palette = "Okabe-Ito")[-1],
ggplot2.continuous.colour = "viridis",
ggplot2.continuous.fill = "viridis"
)Weiterlesen
Einen guten Einstieg in Farbskalen bieten die Kapitel 4 und 19 bei Wilke (2019).