Skip to main content

ggplot_rs/scale/
palettes.rs

1use super::color::RGBAColor;
2
3/// Named palette types.
4#[derive(Clone, Debug)]
5pub enum PaletteName {
6    // Qualitative
7    Set1,
8    Set2,
9    Set3,
10    Dark2,
11    Paired,
12    Pastel1,
13    Pastel2,
14    Accent,
15    // Sequential
16    Blues,
17    Greens,
18    Reds,
19    Oranges,
20    Purples,
21    Greys,
22    YlOrRd,
23    YlGnBu,
24    BuGn,
25    BuPu,
26    GnBu,
27    OrRd,
28    PuRd,
29    RdPu,
30    YlGn,
31    YlOrBr,
32    // Diverging
33    RdBu,
34    Spectral,
35    PiYG,
36    PRGn,
37    BrBG,
38    PuOr,
39    RdGy,
40    RdYlBu,
41    RdYlGn,
42    // Perceptual
43    Viridis,
44    Magma,
45    Plasma,
46    Inferno,
47}
48
49/// Get colors for a named palette.
50pub fn palette(name: &PaletteName) -> &'static [RGBAColor] {
51    match name {
52        PaletteName::Set1 => &SET1,
53        PaletteName::Set2 => &SET2,
54        PaletteName::Set3 => &SET3,
55        PaletteName::Dark2 => &DARK2,
56        PaletteName::Paired => &PAIRED,
57        PaletteName::Pastel1 => &PASTEL1,
58        PaletteName::Pastel2 => &PASTEL2,
59        PaletteName::Accent => &ACCENT,
60        PaletteName::Blues => &BLUES,
61        PaletteName::Greens => &GREENS,
62        PaletteName::Reds => &REDS,
63        PaletteName::Oranges => &ORANGES,
64        PaletteName::Purples => &PURPLES,
65        PaletteName::Greys => &GREYS,
66        PaletteName::YlOrRd => &YLORRD,
67        PaletteName::YlGnBu => &YLGNBU,
68        PaletteName::BuGn => &BUGN,
69        PaletteName::BuPu => &BUPU,
70        PaletteName::GnBu => &GNBU,
71        PaletteName::OrRd => &ORRD,
72        PaletteName::PuRd => &PURD,
73        PaletteName::RdPu => &RDPU,
74        PaletteName::YlGn => &YLGN,
75        PaletteName::YlOrBr => &YLORBR,
76        PaletteName::RdBu => &RDBU,
77        PaletteName::Spectral => &SPECTRAL,
78        PaletteName::PiYG => &PIYG,
79        PaletteName::PRGn => &PRGN,
80        PaletteName::BrBG => &BRBG,
81        PaletteName::PuOr => &PUOR,
82        PaletteName::RdGy => &RDGY,
83        PaletteName::RdYlBu => &RDYLBU,
84        PaletteName::RdYlGn => &RDYLGN,
85        PaletteName::Viridis => &VIRIDIS,
86        PaletteName::Magma => &MAGMA,
87        PaletteName::Plasma => &PLASMA,
88        PaletteName::Inferno => &INFERNO,
89    }
90}
91
92const fn c(r: u8, g: u8, b: u8) -> RGBAColor {
93    RGBAColor { r, g, b, a: 1.0 }
94}
95
96// ─── Qualitative ────────────────────────────────────────────
97
98static SET1: [RGBAColor; 9] = [
99    c(228, 26, 28),
100    c(55, 126, 184),
101    c(77, 175, 74),
102    c(152, 78, 163),
103    c(255, 127, 0),
104    c(255, 255, 51),
105    c(166, 86, 40),
106    c(247, 129, 191),
107    c(153, 153, 153),
108];
109
110static SET2: [RGBAColor; 8] = [
111    c(102, 194, 165),
112    c(252, 141, 98),
113    c(141, 160, 203),
114    c(231, 138, 195),
115    c(166, 216, 84),
116    c(255, 217, 47),
117    c(229, 196, 148),
118    c(179, 179, 179),
119];
120
121static SET3: [RGBAColor; 12] = [
122    c(141, 211, 199),
123    c(255, 255, 179),
124    c(190, 186, 218),
125    c(251, 128, 114),
126    c(128, 177, 211),
127    c(253, 180, 98),
128    c(179, 222, 105),
129    c(252, 205, 229),
130    c(217, 217, 217),
131    c(188, 128, 189),
132    c(204, 235, 197),
133    c(255, 237, 111),
134];
135
136static DARK2: [RGBAColor; 8] = [
137    c(27, 158, 119),
138    c(217, 95, 2),
139    c(117, 112, 179),
140    c(231, 41, 138),
141    c(102, 166, 30),
142    c(230, 171, 2),
143    c(166, 118, 29),
144    c(102, 102, 102),
145];
146
147static PAIRED: [RGBAColor; 12] = [
148    c(166, 206, 227),
149    c(31, 120, 180),
150    c(178, 223, 138),
151    c(51, 160, 44),
152    c(251, 154, 153),
153    c(227, 26, 28),
154    c(253, 191, 111),
155    c(255, 127, 0),
156    c(202, 178, 214),
157    c(106, 61, 154),
158    c(255, 255, 153),
159    c(177, 89, 40),
160];
161
162static PASTEL1: [RGBAColor; 9] = [
163    c(251, 180, 174),
164    c(179, 205, 227),
165    c(204, 235, 197),
166    c(222, 203, 228),
167    c(254, 217, 166),
168    c(255, 255, 204),
169    c(229, 216, 189),
170    c(253, 218, 236),
171    c(242, 242, 242),
172];
173
174static PASTEL2: [RGBAColor; 8] = [
175    c(179, 226, 205),
176    c(253, 205, 172),
177    c(203, 213, 232),
178    c(244, 202, 228),
179    c(230, 245, 201),
180    c(255, 242, 174),
181    c(241, 226, 204),
182    c(204, 204, 204),
183];
184
185static ACCENT: [RGBAColor; 8] = [
186    c(127, 201, 127),
187    c(190, 174, 212),
188    c(253, 192, 134),
189    c(255, 255, 153),
190    c(56, 108, 176),
191    c(240, 2, 127),
192    c(191, 91, 23),
193    c(102, 102, 102),
194];
195
196// ─── Sequential ─────────────────────────────────────────────
197
198static BLUES: [RGBAColor; 9] = [
199    c(247, 251, 255),
200    c(222, 235, 247),
201    c(198, 219, 239),
202    c(158, 202, 225),
203    c(107, 174, 214),
204    c(66, 146, 198),
205    c(33, 113, 181),
206    c(8, 81, 156),
207    c(8, 48, 107),
208];
209
210static GREENS: [RGBAColor; 9] = [
211    c(247, 252, 245),
212    c(229, 245, 224),
213    c(199, 233, 192),
214    c(161, 217, 155),
215    c(116, 196, 118),
216    c(65, 171, 93),
217    c(35, 139, 69),
218    c(0, 109, 44),
219    c(0, 68, 27),
220];
221
222static REDS: [RGBAColor; 9] = [
223    c(255, 245, 240),
224    c(254, 224, 210),
225    c(252, 187, 161),
226    c(252, 146, 114),
227    c(251, 106, 74),
228    c(239, 59, 44),
229    c(203, 24, 29),
230    c(165, 15, 21),
231    c(103, 0, 13),
232];
233
234static ORANGES: [RGBAColor; 9] = [
235    c(255, 245, 235),
236    c(254, 230, 206),
237    c(253, 208, 162),
238    c(253, 174, 107),
239    c(253, 141, 60),
240    c(241, 105, 19),
241    c(217, 72, 1),
242    c(166, 54, 3),
243    c(127, 39, 4),
244];
245
246static PURPLES: [RGBAColor; 9] = [
247    c(252, 251, 253),
248    c(239, 237, 245),
249    c(218, 218, 235),
250    c(188, 189, 220),
251    c(158, 154, 200),
252    c(128, 125, 186),
253    c(106, 81, 163),
254    c(84, 39, 143),
255    c(63, 0, 125),
256];
257
258static GREYS: [RGBAColor; 9] = [
259    c(255, 255, 255),
260    c(240, 240, 240),
261    c(217, 217, 217),
262    c(189, 189, 189),
263    c(150, 150, 150),
264    c(115, 115, 115),
265    c(82, 82, 82),
266    c(37, 37, 37),
267    c(0, 0, 0),
268];
269
270static YLORRD: [RGBAColor; 9] = [
271    c(255, 255, 204),
272    c(255, 237, 160),
273    c(254, 217, 118),
274    c(254, 178, 76),
275    c(253, 141, 60),
276    c(252, 78, 42),
277    c(227, 26, 28),
278    c(189, 0, 38),
279    c(128, 0, 38),
280];
281
282static YLGNBU: [RGBAColor; 9] = [
283    c(255, 255, 217),
284    c(237, 248, 177),
285    c(199, 233, 180),
286    c(127, 205, 187),
287    c(65, 182, 196),
288    c(29, 145, 192),
289    c(34, 94, 168),
290    c(37, 52, 148),
291    c(8, 29, 88),
292];
293
294static BUGN: [RGBAColor; 9] = [
295    c(247, 252, 253),
296    c(229, 245, 249),
297    c(204, 236, 230),
298    c(153, 216, 201),
299    c(102, 194, 164),
300    c(65, 174, 118),
301    c(35, 139, 69),
302    c(0, 109, 44),
303    c(0, 68, 27),
304];
305
306static BUPU: [RGBAColor; 9] = [
307    c(247, 252, 253),
308    c(224, 236, 244),
309    c(191, 211, 230),
310    c(158, 188, 218),
311    c(140, 150, 198),
312    c(140, 107, 177),
313    c(136, 65, 157),
314    c(129, 15, 124),
315    c(77, 0, 75),
316];
317
318static GNBU: [RGBAColor; 9] = [
319    c(247, 252, 240),
320    c(224, 243, 219),
321    c(204, 235, 197),
322    c(168, 221, 181),
323    c(123, 204, 196),
324    c(78, 179, 211),
325    c(43, 140, 190),
326    c(8, 104, 172),
327    c(8, 64, 129),
328];
329
330static ORRD: [RGBAColor; 9] = [
331    c(255, 247, 236),
332    c(254, 232, 200),
333    c(253, 212, 158),
334    c(253, 187, 132),
335    c(252, 141, 89),
336    c(239, 101, 72),
337    c(215, 48, 31),
338    c(179, 0, 0),
339    c(127, 0, 0),
340];
341
342static PURD: [RGBAColor; 9] = [
343    c(247, 244, 249),
344    c(231, 225, 239),
345    c(212, 185, 218),
346    c(201, 148, 199),
347    c(223, 101, 176),
348    c(231, 41, 138),
349    c(206, 18, 86),
350    c(152, 0, 67),
351    c(103, 0, 31),
352];
353
354static RDPU: [RGBAColor; 9] = [
355    c(255, 247, 243),
356    c(253, 224, 221),
357    c(252, 197, 192),
358    c(250, 159, 181),
359    c(247, 104, 161),
360    c(221, 52, 151),
361    c(174, 1, 126),
362    c(122, 1, 119),
363    c(73, 0, 106),
364];
365
366static YLGN: [RGBAColor; 9] = [
367    c(255, 255, 229),
368    c(247, 252, 185),
369    c(217, 240, 163),
370    c(173, 221, 142),
371    c(120, 198, 121),
372    c(65, 171, 93),
373    c(35, 132, 67),
374    c(0, 104, 55),
375    c(0, 69, 41),
376];
377
378static YLORBR: [RGBAColor; 9] = [
379    c(255, 255, 229),
380    c(255, 247, 188),
381    c(254, 227, 145),
382    c(254, 196, 79),
383    c(254, 153, 41),
384    c(236, 112, 20),
385    c(204, 76, 2),
386    c(153, 52, 4),
387    c(102, 37, 6),
388];
389
390// ─── Diverging ──────────────────────────────────────────────
391
392static RDBU: [RGBAColor; 11] = [
393    c(103, 0, 31),
394    c(178, 24, 43),
395    c(214, 96, 77),
396    c(244, 165, 130),
397    c(253, 219, 199),
398    c(247, 247, 247),
399    c(209, 229, 240),
400    c(146, 197, 222),
401    c(67, 147, 195),
402    c(33, 102, 172),
403    c(5, 48, 97),
404];
405
406static SPECTRAL: [RGBAColor; 11] = [
407    c(158, 1, 66),
408    c(213, 62, 79),
409    c(244, 109, 67),
410    c(253, 174, 97),
411    c(254, 224, 139),
412    c(255, 255, 191),
413    c(230, 245, 152),
414    c(171, 221, 164),
415    c(102, 194, 165),
416    c(50, 136, 189),
417    c(94, 79, 162),
418];
419
420static PIYG: [RGBAColor; 11] = [
421    c(142, 1, 82),
422    c(197, 27, 125),
423    c(222, 119, 174),
424    c(241, 182, 218),
425    c(253, 224, 239),
426    c(247, 247, 247),
427    c(230, 245, 208),
428    c(184, 225, 134),
429    c(127, 188, 65),
430    c(77, 146, 33),
431    c(39, 100, 25),
432];
433
434static PRGN: [RGBAColor; 11] = [
435    c(64, 0, 75),
436    c(118, 42, 131),
437    c(153, 112, 171),
438    c(194, 165, 207),
439    c(231, 212, 232),
440    c(247, 247, 247),
441    c(217, 240, 211),
442    c(166, 219, 160),
443    c(90, 174, 97),
444    c(27, 120, 55),
445    c(0, 68, 27),
446];
447
448static BRBG: [RGBAColor; 11] = [
449    c(84, 48, 5),
450    c(140, 81, 10),
451    c(191, 129, 45),
452    c(223, 194, 125),
453    c(246, 232, 195),
454    c(245, 245, 245),
455    c(199, 234, 229),
456    c(128, 205, 193),
457    c(53, 151, 143),
458    c(1, 102, 94),
459    c(0, 60, 48),
460];
461
462static PUOR: [RGBAColor; 11] = [
463    c(127, 59, 8),
464    c(179, 88, 6),
465    c(224, 130, 20),
466    c(253, 184, 99),
467    c(254, 224, 182),
468    c(247, 247, 247),
469    c(216, 218, 235),
470    c(178, 171, 210),
471    c(128, 115, 172),
472    c(84, 39, 136),
473    c(45, 0, 75),
474];
475
476static RDGY: [RGBAColor; 11] = [
477    c(103, 0, 31),
478    c(178, 24, 43),
479    c(214, 96, 77),
480    c(244, 165, 130),
481    c(253, 219, 199),
482    c(255, 255, 255),
483    c(224, 224, 224),
484    c(186, 186, 186),
485    c(135, 135, 135),
486    c(77, 77, 77),
487    c(26, 26, 26),
488];
489
490static RDYLBU: [RGBAColor; 11] = [
491    c(165, 0, 38),
492    c(215, 48, 39),
493    c(244, 109, 67),
494    c(253, 174, 97),
495    c(254, 224, 144),
496    c(255, 255, 191),
497    c(224, 243, 248),
498    c(171, 217, 233),
499    c(116, 173, 209),
500    c(69, 117, 180),
501    c(49, 54, 149),
502];
503
504static RDYLGN: [RGBAColor; 11] = [
505    c(165, 0, 38),
506    c(215, 48, 39),
507    c(244, 109, 67),
508    c(253, 174, 97),
509    c(254, 224, 139),
510    c(255, 255, 191),
511    c(217, 239, 139),
512    c(166, 217, 106),
513    c(102, 189, 99),
514    c(26, 152, 80),
515    c(0, 104, 55),
516];
517
518// ─── Perceptual ─────────────────────────────────────────────
519
520static VIRIDIS: [RGBAColor; 16] = [
521    c(68, 1, 84),
522    c(72, 26, 108),
523    c(71, 47, 126),
524    c(65, 68, 135),
525    c(57, 86, 140),
526    c(47, 104, 142),
527    c(38, 121, 142),
528    c(31, 138, 141),
529    c(30, 155, 138),
530    c(42, 172, 130),
531    c(70, 188, 115),
532    c(109, 202, 93),
533    c(155, 213, 67),
534    c(200, 222, 39),
535    c(240, 229, 30),
536    c(253, 231, 37),
537];
538
539static MAGMA: [RGBAColor; 16] = [
540    c(0, 0, 4),
541    c(16, 12, 50),
542    c(41, 17, 90),
543    c(72, 12, 110),
544    c(101, 19, 110),
545    c(131, 29, 103),
546    c(160, 42, 93),
547    c(187, 55, 84),
548    c(213, 72, 72),
549    c(232, 99, 62),
550    c(247, 131, 57),
551    c(254, 167, 69),
552    c(254, 203, 99),
553    c(252, 235, 141),
554    c(252, 254, 188),
555    c(252, 253, 191),
556];
557
558static PLASMA: [RGBAColor; 16] = [
559    c(13, 8, 135),
560    c(53, 5, 157),
561    c(82, 1, 163),
562    c(109, 1, 159),
563    c(133, 7, 147),
564    c(156, 23, 127),
565    c(175, 42, 106),
566    c(192, 61, 85),
567    c(206, 82, 66),
568    c(218, 105, 46),
569    c(228, 130, 24),
570    c(236, 157, 6),
571    c(240, 185, 11),
572    c(239, 213, 38),
573    c(232, 240, 73),
574    c(240, 249, 33),
575];
576
577static INFERNO: [RGBAColor; 16] = [
578    c(0, 0, 4),
579    c(14, 11, 49),
580    c(39, 15, 90),
581    c(67, 10, 107),
582    c(95, 13, 106),
583    c(122, 21, 97),
584    c(149, 33, 81),
585    c(174, 49, 60),
586    c(196, 69, 38),
587    c(215, 95, 15),
588    c(231, 124, 3),
589    c(243, 155, 7),
590    c(250, 189, 28),
591    c(252, 222, 67),
592    c(247, 252, 118),
593    c(252, 255, 164),
594];