Farben in R

Farbmodelle, benannte Farben und Paletten für wissenschaftliche Grafiken

Wie Farben in R beschrieben werden, welche Farbnamen R kennt und welche Paletten wir mit colorspace, RColorBrewer, viridis, scico und weiteren Paketen in ggplot2 verwenden.

Die 455 benannten Farben von R (ohne die Graustufen gray0 bis gray100), sortiert nach Farbton.

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)     # interpolieren

Paletten 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 Paletten

ggplot2

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.0

Prü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 vergleichen

Farbmodelle

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, 0

Rot + 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.

#
E4Rot
14 · 16 + 4 = 228
95Grün
9 · 16 + 5 = 149
A5Blau
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".

WarnungGleicher Name, andere Farbe

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)
h = 0h = 1
hsv(h = 0.6, s = seq(0, 1, length.out = 11), v = 1)
s = 0 (grau)s = 1 (rein)
hsv(h = 0.6, s = 1, v = seq(0, 1, length.out = 11))
v = 0 (schwarz)v = 1 (volle Intensität)

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 HSV

HCL: 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)
h = 0h = 360
hcl(h = 250, c = seq(0, 60, length.out = 11), l = 50)
c = 0 (grau)c = 60
hcl(h = 250, c = 20, l = seq(10, 95, length.out = 11))
l = 10 (dunkel)l = 95 (hell)

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).

90 80 70 60 50 40 30 20 l / h 0 60 120 180 240 300

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.

HSVs = 1, v = 1
0°90°180°270°
graudesaturate()
0°90°180°270°

Gleiche Sättigung und gleicher Hellwert, aber sehr unterschiedliche Helligkeit

HCLc = 50, l = 70
0°90°180°270°
graudesaturate()
0°90°180°270°

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.

0 10 20 30 40 50 60 70 80 90 100

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.

pink#FFC0CB
lightpink#FFB6C1
pink1#FFB5C5
lightpink1#FFAEB9
pink2#EEA9B8
lightpink2#EEA2AD
palevioletred1#FF82AB
pink3#CD919E
palevioletred2#EE799F
lightpink3#CD8C95
palevioletred#DB7093
violetred1#FF3E96
palevioletred3#CD6889
violetred2#EE3A8C
violetred3#CD3278
pink4#8B636C
lightpink4#8B5F65
maroon#B03060
palevioletred4#8B475D
mistyrose#FFE4E1
mistyrose1#FFE4E1
mistyrose2#EED5D2
rosybrown1#FFC1C1
rosybrown2#EEB4B4
mistyrose3#CDB7B5
lightsalmon#FFA07A
lightsalmon1#FFA07A
salmon1#FF8C69
lightsalmon2#EE9572
darksalmon#E9967A
rosybrown3#CD9B9B
sienna1#FF8247
coral#FF7F50
salmon#FA8072
chocolate1#FF7F24
darkorange1#FF7F00
lightcoral#F08080
salmon2#EE8262
coral1#FF7256
indianred1#FF6A6A
rosybrown#BC8F8F
sienna2#EE7942
chocolate2#EE7621
darkorange2#EE7600
tomato#FF6347
tomato1#FF6347
lightsalmon3#CD8162
coral2#EE6A50
indianred2#EE6363
tomato2#EE5C42
orangered#FF4500
orangered1#FF4500
brown1#FF4040
salmon3#CD7054
chocolate#D2691E
firebrick1#FF3030
sienna3#CD6839
chocolate3#CD661D
orangered2#EE4000
brown2#EE3B3B
mistyrose4#8B7D7B
indianred#CD5C5C
red#FF0000
red1#FF0000
coral3#CD5B45
firebrick2#EE2C2C
indianred3#CD5555
tomato3#CD4F39
red2#EE0000
rosybrown4#8B6969
orangered3#CD3700
brown3#CD3333
firebrick3#CD2626
sienna#A0522D
red3#CD0000
lightsalmon4#8B5742
salmon4#8B4C39
firebrick#B22222
sienna4#8B4726
brown#A52A2A
chocolate4#8B4513
saddlebrown#8B4513
coral4#8B3E2F
indianred4#8B3A3A
tomato4#8B3626
brown4#8B2323
orangered4#8B2500
firebrick4#8B1A1A
darkred#8B0000
red4#8B0000
seashell#FFF5EE
seashell1#FFF5EE
seashell2#EEE5DE
peachpuff#FFDAB9
peachpuff1#FFDAB9
peachpuff2#EECBAD
seashell3#CDC5BF
tan1#FFA54F
orange#FFA500
orange1#FFA500
sandybrown#F4A460
peachpuff3#CDAF95
tan2#EE9A49
orange2#EE9A00
darkorange#FF8C00
peru#CD853F
tan3#CD853F
orange3#CD8500
darkorange3#CD6600
peachpuff4#8B7765
tan4#8B5A2B
orange4#8B5A00
darkorange4#8B4500
floralwhite#FFFAF0
oldlace#FDF5E6
linen#FAF0E6
antiquewhite1#FFEFDB
papayawhip#FFEFD5
blanchedalmond#FFEBCD
antiquewhite#FAEBD7
wheat1#FFE7BA
bisque#FFE4C4
bisque1#FFE4C4
moccasin#FFE4B5
navajowhite#FFDEAD
navajowhite1#FFDEAD
antiquewhite2#EEDFCC
wheat#F5DEB3
wheat2#EED8AE
burlywood1#FFD39B
gold#FFD700
gold1#FFD700
bisque2#EED5B7
navajowhite2#EECFA1
burlywood2#EEC591
gold2#EEC900
goldenrod1#FFC125
darkgoldenrod1#FFB90F
antiquewhite3#CDC0B0
burlywood#DEB887
goldenrod2#EEB422
wheat3#CDBA96
bisque3#CDB79E
tan#D2B48C
darkgoldenrod2#EEAD0E
navajowhite3#CDB38B
burlywood3#CDAA7D
gold3#CDAD00
goldenrod#DAA520
goldenrod3#CD9B1D
darkgoldenrod3#CD950C
darkgoldenrod#B8860B
antiquewhite4#8B8378
wheat4#8B7E66
bisque4#8B7D6B
navajowhite4#8B795E
burlywood4#8B7355
gold4#8B7500
goldenrod4#8B6914
darkgoldenrod4#8B6508
ivory#FFFFF0
ivory1#FFFFF0
lightyellow#FFFFE0
lightyellow1#FFFFE0
lemonchiffon#FFFACD
lemonchiffon1#FFFACD
cornsilk#FFF8DC
cornsilk1#FFF8DC
lightgoldenrodyellow#FAFAD2
yellow#FFFF00
yellow1#FFFF00
beige#F5F5DC
khaki1#FFF68F
ivory2#EEEEE0
lightyellow2#EEEED1
lightgoldenrod1#FFEC8B
cornsilk2#EEE8CD
lemonchiffon2#EEE9BF
yellow2#EEEE00
palegoldenrod#EEE8AA
khaki#F0E68C
khaki2#EEE685
lightgoldenrod#EEDD82
lightgoldenrod2#EEDC82
ivory3#CDCDC1
lightyellow3#CDCDB4
lemonchiffon3#CDC9A5
cornsilk3#CDC8B1
yellow3#CDCD00
khaki3#CDC673
lightgoldenrod3#CDBE70
darkkhaki#BDB76B
ivory4#8B8B83
lightyellow4#8B8B7A
lemonchiffon4#8B8970
cornsilk4#8B8878
yellow4#8B8B00
khaki4#8B864E
lightgoldenrod4#8B814C
darkolivegreen1#CAFF70
olivedrab1#C0FF3E
darkolivegreen2#BCEE68
olivedrab2#B3EE3A
darkolivegreen3#A2CD5A
olivedrab3#9ACD32
yellowgreen#9ACD32
olivedrab#6B8E23
darkolivegreen4#6E8B3D
olivedrab4#698B22
darkolivegreen#556B2F
honeydew#F0FFF0
honeydew1#F0FFF0
darkseagreen1#C1FFC1
honeydew2#E0EEE0
palegreen1#9AFF9A
greenyellow#ADFF2F
palegreen#98FB98
chartreuse#7FFF00
chartreuse1#7FFF00
darkseagreen2#B4EEB4
lawngreen#7CFC00
green#00FF00
green1#00FF00
lightgreen#90EE90
palegreen2#90EE90
chartreuse2#76EE00
green2#00EE00
honeydew3#C1CDC1
darkseagreen3#9BCD9B
palegreen3#7CCD7C
chartreuse3#66CD00
limegreen#32CD32
darkseagreen#8FBC8F
green3#00CD00
honeydew4#838B83
darkseagreen4#698B69
palegreen4#548B54
chartreuse4#458B00
forestgreen#228B22
green4#008B00
darkgreen#006400
seagreen1#54FF9F
springgreen#00FF7F
springgreen1#00FF7F
mediumspringgreen#00FA9A
seagreen2#4EEE94
springgreen2#00EE76
seagreen3#43CD80
springgreen3#00CD66
mediumseagreen#3CB371
seagreen#2E8B57
seagreen4#2E8B57
springgreen4#008B45
aquamarine#7FFFD4
aquamarine1#7FFFD4
aquamarine2#76EEC6
aquamarine3#66CDAA
mediumaquamarine#66CDAA
aquamarine4#458B74
turquoise#40E0D0
mediumturquoise#48D1CC
lightseagreen#20B2AA
azure#F0FFFF
azure1#F0FFFF
lightcyan#E0FFFF
lightcyan1#E0FFFF
paleturquoise1#BBFFFF
darkslategray1#97FFFF
azure2#E0EEEE
lightcyan2#D1EEEE
cadetblue1#98F5FF
cyan#00FFFF
cyan1#00FFFF
paleturquoise#AFEEEE
paleturquoise2#AEEEEE
darkslategray2#8DEEEE
turquoise1#00F5FF
powderblue#B0E0E6
cadetblue2#8EE5EE
cyan2#00EEEE
turquoise2#00E5EE
azure3#C1CDCD
lightcyan3#B4CDCD
paleturquoise3#96CDCD
darkslategray3#79CDCD
darkturquoise#00CED1
cadetblue3#7AC5CD
cyan3#00CDCD
turquoise3#00C5CD
cadetblue#5F9EA0
lightcyan4#7A8B8B
paleturquoise4#668B8B
darkslategray4#528B8B
cadetblue4#53868B
cyan4#008B8B
darkcyan#008B8B
turquoise4#00868B
darkslategray#2F4F4F
darkslategrey#2F4F4F
lightblue1#BFEFFF
lightskyblue1#B0E2FF
lightblue2#B2DFEE
lightblue#ADD8E6
lightskyblue2#A4D3EE
skyblue#87CEEB
lightblue3#9AC0CD
lightskyblue3#8DB6CD
lightblue4#68838B
lightskyblue4#607B8B
aliceblue#F0F8FF
lightsteelblue1#CAE1FF
slategray1#C6E2FF
slategray2#B9D3EE
lightsteelblue2#BCD2EE
skyblue1#87CEFF
lightskyblue#87CEFA
lightsteelblue#B0C4DE
skyblue2#7EC0EE
slategray3#9FB6CD
lightsteelblue3#A2B5CD
deepskyblue#00BFFF
deepskyblue1#00BFFF
steelblue1#63B8FF
deepskyblue2#00B2EE
steelblue2#5CACEE
skyblue3#6CA6CD
deepskyblue3#009ACD
steelblue3#4F94CD
lightslategray#778899
lightslategrey#778899
slategray#708090
slategrey#708090
steelblue#4682B4
lightsteelblue4#6E7B8B
slategray4#6C7B8B
skyblue4#4A708B
deepskyblue4#00688B
steelblue4#36648B
lavender#E6E6FA
cornflowerblue#6495ED
dodgerblue#1E90FF
dodgerblue1#1E90FF
lightslateblue#8470FF
dodgerblue2#1C86EE
slateblue1#836FFF
royalblue1#4876FF
mediumslateblue#7B68EE
slateblue2#7A67EE
royalblue2#436EEE
dodgerblue3#1874CD
royalblue#4169E1
slateblue#6A5ACD
slateblue3#6959CD
royalblue3#3A5FCD
dodgerblue4#104E8B
blue#0000FF
blue1#0000FF
darkslateblue#483D8B
slateblue4#473C8B
blue2#0000EE
royalblue4#27408B
blue3#0000CD
mediumblue#0000CD
midnightblue#191970
blue4#00008B
darkblue#00008B
navy#000080
navyblue#000080
mediumpurple1#AB82FF
mediumpurple2#9F79EE
mediumpurple#9370DB
darkorchid1#BF3EFF
mediumpurple3#8968CD
darkorchid2#B23AEE
purple1#9B30FF
purple#A020F0
purple2#912CEE
darkorchid3#9A32CD
darkorchid#9932CC
blueviolet#8A2BE2
darkviolet#9400D3
purple3#7D26CD
mediumpurple4#5D478B
darkorchid4#68228B
purple4#551A8B
thistle1#FFE1FF
thistle2#EED2EE
plum1#FFBBFF
thistle#D8BFD8
plum2#EEAEEE
thistle3#CDB5CD
plum#DDA0DD
orchid1#FF83FA
violet#EE82EE
plum3#CD96CD
mediumorchid1#E066FF
orchid#DA70D6
magenta#FF00FF
magenta1#FF00FF
mediumorchid2#D15FEE
orchid3#CD69C9
magenta2#EE00EE
mediumorchid#BA55D3
thistle4#8B7B8B
mediumorchid3#B452CD
magenta3#CD00CD
plum4#8B668B
orchid4#8B4789
mediumorchid4#7A378B
darkmagenta#8B008B
magenta4#8B008B
orchid2#EE7AE9
lavenderblush#FFF0F5
lavenderblush1#FFF0F5
lavenderblush2#EEE0E5
lavenderblush3#CDC1C5
hotpink1#FF6EB4
hotpink#FF69B4
hotpink2#EE6AA7
maroon1#FF34B3
deeppink#FF1493
deeppink1#FF1493
hotpink3#CD6090
maroon2#EE30A7
deeppink2#EE1289
maroon3#CD2990
violetred#D02090
deeppink3#CD1076
mediumvioletred#C71585
hotpink4#8B3A62
violetred4#8B2252
maroon4#8B1C62
deeppink4#8B0A50
white#FFFFFF
mintcream#F5FFFA
snow#FFFAFA
snow1#FFFAFA
ghostwhite#F8F8FF
whitesmoke#F5F5F5
snow2#EEE9E9
gainsboro#DCDCDC
lightgray#D3D3D3
lightgrey#D3D3D3
snow3#CDC9C9
gray#BEBEBE
grey#BEBEBE
darkgray#A9A9A9
darkgrey#A9A9A9
snow4#8B8989
azure4#838B8B
seashell4#8B8682
lavenderblush4#8B8386
dimgray#696969
dimgrey#696969
black#000000

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")
TippFür neue Grafiken lieber HCL

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")
Ausgangspalette
lighten(p, 0.4)
heller, Farbton bleibt
darken(p, 0.3)
dunkler, Farbton bleibt
desaturate(p, 0.5)
halb entsättigt
desaturate(p)
nur noch Luminanz: alle gleich hell, wie wir es bei einer qualitativen Palette wollen
deutan(p)
Simulation Deuteranopie (Grünblindheit)
protan(p)
Simulation Protanopie (Rotblindheit)
tritan(p)
Simulation Tritanopie (Blaublindheit)

colorspace mit ggplot2

Alle ggplot2-Skalen von colorspace folgen einem Schema aus drei Teilen. Statt colour können wir auch color schreiben.

scale_
colourfillWas färben wir ein?
_
discretecontinuousbinnedWelche Art von Variable?
_
qualitativesequentialdivergingdivergingxWelcher Palettentyp?
()
Für Flächen (Balken, Kacheln, Karten) nehmen wir jeweils fill statt colour, z. B. scale_fill_continuous_sequential().
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"))       # gebinnt

RColorBrewer

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

max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐
max. 9 ◐

Divergierend

max. 11 ◐
max. 11 ◐
max. 11 ◐
max. 11 ◐
max. 11 ◐
max. 11
max. 11 ◐
max. 11
max. 11

Qualitativ

max. 8
max. 8 ◐
max. 12 ◐
max. 9
max. 8
max. 9
max. 8 ◐
max. 12

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
HinweisGrenzen von brewer.pal()

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).

Alle Pakete gibt es auf CRAN. Mit pacman::p_load(scico, khroma, paletteer) installieren und laden wir mehrere Pakete in einem Schritt.
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 R

scico

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")         # diskret

cmocean

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.

1 black#000000
2 orange#E69F00
3 skyblue#56B4E9
4 bluishgreen#009E73
5 yellow#F0E442
6 blue#0072B2
7 vermillion#D55E00
8 reddishpurple#CC79A7
9 gray#999999
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.0

Paul 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()                  # sequentiell

ggprism

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 nachschlagen

Viele 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

Für Flächen jeweils fill statt colour.
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).

Paketseiten:

Literatur

Crameri, Fabio, Grace E. Shephard, und Philip J. Heron. 2020. „The Misuse of Colour in Science Communication“. Nature Communications 11 (Oktober). https://doi.org/10.1038/s41467-020-19160-7.
Harrower, Mark, und Cynthia A. Brewer. 2003. „ColorBrewer.org: An Online Tool for Selecting Colour Schemes for Maps“. The Cartographic Journal 40 (1): 27–37. https://doi.org/10.1179/000870403235002042.
Machado, Gustavo M., Manuel M. Oliveira, und Leandro A. F. Fernandes. 2009. „A Physiologically-Based Model for Simulation of Color Vision Deficiency“. IEEE Transactions on Visualization and Computer Graphics 15 (6): 1291–98. https://doi.org/10.1109/TVCG.2009.113.
Nuñez, Jamie R., Christopher R. Anderton, und Ryan S. Renslow. 2018. „Optimizing Colormaps with Consideration for Color Vision Deficiency to Enable Accurate Interpretation of Scientific Data“. PLOS ONE 13 (7). https://doi.org/10.1371/journal.pone.0199239.
Okabe, Masataka, und Kei Ito. (2002) 2008. „Color Universal Design (CUD): How to Make Figures and Presentations That Are Friendly to Colorblind People“. November 20, September 24. https://jfly.uni-koeln.de/color/.
Thyng, Kristen M., Chad A. Greene, Robert D. Hetland, Heather M. Zimmerle, und Steven F. DiMarco. 2016. „True Colors of Oceanography: Guidelines for Effective and Accurate Colormap Selection“. Oceanography 29 (3): 9–13. https://doi.org/10.5670/oceanog.2016.66.
Tol, Paul. 2021. Colour Schemes. Technical Note SRON/EPS/TN/09-002. Version 3.2. SRON Netherlands Institute for Space Research. https://sronpersonalpages.nl/~pault/data/colourschemes.pdf.
Wilke, Claus O. 2019. Fundamentals of Data Visualization: A Primer on Making Informative and Compelling Figures. O’Reilly. https://clauswilke.com/dataviz/.
Zeileis, Achim, Jason C. Fisher, Kurt Hornik, u. a. 2020. „Colorspace: A Toolbox for Manipulating and Assessing Colors and Palettes“. Journal of Statistical Software 96 (1): 1–49. https://doi.org/10.18637/jss.v096.i01.
Zeileis, Achim, Kurt Hornik, und Paul Murrell. 2009. „Escaping RGBland: Selecting Colors for Statistical Graphics“. Computational Statistics & Data Analysis 53 (9): 3259–70. https://doi.org/10.1016/j.csda.2008.11.033.