Skip to main content

ggplot_rs/scale/
palettes.rs

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