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