All files / owid-grapher/grapher/color ColorBrewerSchemes.ts

100% Statements 90/90
100% Branches 3/3
100% Functions 0/0
100% Lines 90/90

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 791x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 35x 35x 35x 35x 35x 35x 35x 35x 35x 35x 35x 35x 35x 1x
import * as colorbrewer from "colorbrewer"
import { Color } from "../../coreTable/CoreTableConstants"
import { ColorSchemeInterface, ColorSchemeName } from "./ColorConstants"
 
type ColorSchemeProps = { displayName: string; singleColorScale: boolean }
 
const ColorBrewerSchemeIndex: {
    [key in ColorSchemeName]?: ColorSchemeProps
} = {
    YlGn: { displayName: "Yellow-Green shades", singleColorScale: true },
    YlGnBu: {
        displayName: "Yellow-Green-Blue shades",
        singleColorScale: false,
    },
    GnBu: { displayName: "Green-Blue shades", singleColorScale: true },
    BuGn: { displayName: "Blue-Green shades", singleColorScale: true },
    PuBuGn: {
        displayName: "Purple-Blue-Green shades",
        singleColorScale: false,
    },
    BuPu: { displayName: "Blue-Purple shades", singleColorScale: true },
    RdPu: { displayName: "Red-Purple shades", singleColorScale: true },
    PuRd: { displayName: "Purple-Red shades", singleColorScale: true },
    OrRd: { displayName: "Orange-Red shades", singleColorScale: true },
    YlOrRd: {
        displayName: "Yellow-Orange-Red shades",
        singleColorScale: true,
    },
    YlOrBr: {
        displayName: "Yellow-Orange-Brown shades",
        singleColorScale: true,
    },
    Purples: { displayName: "Purple shades", singleColorScale: true },
    Blues: { displayName: "Blue shades", singleColorScale: true },
    Greens: { displayName: "Green shades", singleColorScale: true },
    Oranges: { displayName: "Orange shades", singleColorScale: true },
    Reds: { displayName: "Red shades", singleColorScale: true },
    Greys: { displayName: "Grey shades", singleColorScale: true },
    PuOr: { displayName: "Purple-Orange", singleColorScale: false },
    BrBG: { displayName: "Brown-Blue-Green", singleColorScale: false },
    PRGn: { displayName: "Purple-Red-Green", singleColorScale: false },
    PiYG: { displayName: "Magenta-Yellow-Green", singleColorScale: false },
    RdBu: { displayName: "Red-Blue", singleColorScale: false },
    RdGy: { displayName: "Red-Grey", singleColorScale: false },
    RdYlBu: { displayName: "Red-Yellow-Blue", singleColorScale: false },
    Spectral: { displayName: "Spectral colors", singleColorScale: false },
    RdYlGn: { displayName: "Red-Yellow-Green", singleColorScale: false },
    Accent: { displayName: "Accents", singleColorScale: false },
    Dark2: { displayName: "Dark colors", singleColorScale: false },
    Paired: { displayName: "Paired colors", singleColorScale: false },
    Pastel1: { displayName: "Pastel 1 colors", singleColorScale: false },
    Pastel2: { displayName: "Pastel 2 colors", singleColorScale: false },
    Set1: { displayName: "Set 1 colors", singleColorScale: false },
    Set2: { displayName: "Set 2 colors", singleColorScale: false },
    Set3: { displayName: "Set 3 colors", singleColorScale: false },
    PuBu: { displayName: "Purple-Blue shades", singleColorScale: true },
    "hsv-RdBu": { displayName: "HSV Red-Blue", singleColorScale: false },
    "hsv-CyMg": { displayName: "HSV Cyan-Magenta", singleColorScale: false },
} as const
 
const brewerKeys = Object.keys(colorbrewer) as ColorSchemeName[]
 
export const ColorBrewerSchemes: ColorSchemeInterface[] = brewerKeys
    .filter((brewerName) => ColorBrewerSchemeIndex[brewerName])
    .map((brewerName) => {
        const props = ColorBrewerSchemeIndex[brewerName]!
        const colorSets = (colorbrewer as any)[brewerName] as any
        const colorSetsArray: Color[][] = []
        Object.keys(colorSets).forEach(
            (numColors) => (colorSetsArray[+numColors] = colorSets[numColors])
        )
        return {
            name: brewerName,
            displayName: props.displayName,
            colorSets: colorSetsArray,
            singleColorScale: props.singleColorScale,
        }
    })