From 087bd7910a8dfb211d52890dc95d6f2dcf8538f5 Mon Sep 17 00:00:00 2001 From: kortschak Date: Wed, 11 Feb 2015 20:41:30 +1030 Subject: [PATCH] Import biogo.graphics palettes Minor changes to packages in that repo: * Change from gocheck to testing. * golint changes. --- palette/brewer/brewer.go | 174 + palette/brewer/generate_complete_palettes.go | 240 + palette/brewer/generate_palettes.go | 163 + palette/brewer/palettes.go | 4795 ++++++++++++++++++ palette/hsva.go | 116 + palette/hsva_test.go | 83 + palette/palette.go | 102 + palette/palette_test.go | 66 + 8 files changed, 5739 insertions(+) create mode 100644 palette/brewer/brewer.go create mode 100644 palette/brewer/generate_complete_palettes.go create mode 100644 palette/brewer/generate_palettes.go create mode 100644 palette/brewer/palettes.go create mode 100644 palette/hsva.go create mode 100644 palette/hsva_test.go create mode 100644 palette/palette.go create mode 100644 palette/palette_test.go diff --git a/palette/brewer/brewer.go b/palette/brewer/brewer.go new file mode 100644 index 00000000..cf9fc9cd --- /dev/null +++ b/palette/brewer/brewer.go @@ -0,0 +1,174 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Palette type comments ©2002 Cynthia Brewer. + +// Package brewer provides Brewer Palettes for informative graphics. +// +// The colors defined here are from http://www.ColorBrewer.org/ by Cynthia A. Brewer, +// Geography, Pennsylvania State University. +// +// For more information see: +// http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_learnMore.html +// +package brewer + +import ( + "code.google.com/p/biogo.graphics/palette" + "errors" + "fmt" + "image/color" +) + +// Color represents a Brewer Palette color. +type Color struct { + Letter byte + color.Color +} + +// Usability describes the usability of a palette for particular use cases. +type Usability byte + +const ( + NotAvalailable Usability = iota + Bad + Unsure + Good +) + +// Palette represents a color scheme. +type Palette struct { + ID string + Name string + + Laptop Usability + CRT Usability + ColorBlind Usability + Copy Usability + Projector Usability + + Color []color.Color +} + +// DivergingPalette represents a diverging color scheme. +type DivergingPalette Palette + +// Colors returns the palette's color collection. +func (d DivergingPalette) Colors() []color.Color { return d.Color } + +// CriticalIndex returns the indices of the lightest (median) color or colors in the DivergingPalette. +// The low and high index values will be equal when there is a single median color. +func (d DivergingPalette) CriticalIndex() (low, high int) { + l := len(d.Color) + return (l - 1) / 2, l / 2 +} + +// NonDivergingPalette represents sequential or qualitative color schemes. +type NonDivergingPalette Palette + +// Colors returns the palette's color collection. +func (d NonDivergingPalette) Colors() []color.Color { return d.Color } + +// Diverging schemes put equal emphasis on mid-range critical values and extremes +// at both ends of the data range. The critical class or break in the middle of the +// legend is emphasized with light colors and low and high extremes are emphasized +// with dark colors that have contrasting hues. +type Diverging map[int]DivergingPalette + +// Qualitative schemes do not imply magnitude differences between legend classes, +// and hues are used to create the primary visual differences between classes. +// Qualitative schemes are best suited to representing nominal or categorical data. +type Qualitative map[int]NonDivergingPalette + +// Sequential schemes are suited to ordered data that progress from low to high. +// Lightness steps dominate the look of these schemes, with light colors for low +// data values to dark colors for high data values. +type Sequential map[int]NonDivergingPalette + +var ( + // DivergingPalettes is a string-based map look-up table of diverging palettes. + DivergingPalettes map[string]Diverging = diverging + + // QualitativePalettes is a string-based map look-up table of qualitative palettes. + QualitativePalettes map[string]Qualitative = qualitative + + // SequentialPalettes is a string-based map look-up table of sequential palettes. + SequentialPalettes map[string]Sequential = sequential +) + +// PaletteType indicates palette type for a GetPalette request. +type PaletteType int + +const ( + TypeAny PaletteType = iota + TypeDiverging + TypeQualitative + TypeSequential +) + +// GetPalette returns a Palette based on palette type and name, and the number of colors +// required. An error is returned if the palette name or type is not known or the requested +// palette does not support the required number of colors. +func GetPalette(typ PaletteType, name string, colors int) (palette.Palette, error) { + if colors < 3 { + return nil, errors.New("brewer: number of colors must be 3 or greater") + } + var ( + p palette.Palette + + nameOk, colorsOk bool + ) + switch typ { + case TypeAny: + var pt interface{} + pt, nameOk = all[name] + if !nameOk { + break + } + switch pt := pt.(type) { + case Diverging: + p, colorsOk = pt[colors] + case Qualitative: + p, colorsOk = pt[colors] + case Sequential: + p, colorsOk = pt[colors] + default: + panic("brewer: unexpected type") + } + case TypeDiverging: + var pt Diverging + pt, nameOk = diverging[name] + if !nameOk { + break + } + p, colorsOk = pt[colors] + case TypeQualitative: + var pt Qualitative + pt, nameOk = qualitative[name] + if !nameOk { + break + } + p, colorsOk = pt[colors] + case TypeSequential: + var pt Sequential + pt, nameOk = sequential[name] + if !nameOk { + break + } + p, colorsOk = pt[colors] + default: + return nil, fmt.Errorf("brewer: palette type not known: %v", typ) + } + if !nameOk { + return nil, fmt.Errorf("brewer: palette %q not known", name) + } + if !colorsOk { + return nil, fmt.Errorf("brewer: palette %q does not support %d colors", name, colors) + } + return p, nil +} diff --git a/palette/brewer/generate_complete_palettes.go b/palette/brewer/generate_complete_palettes.go new file mode 100644 index 00000000..e7a85e0e --- /dev/null +++ b/palette/brewer/generate_complete_palettes.go @@ -0,0 +1,240 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// This program generates a Brewer Palette Go source file from +// a csv/tsv file exported from the xls file available from +// http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_updates.html +// +// Run the program: +// go run generate_complete_palettes infile.xml infile.tsv +package main + +import ( + "bufio" + "encoding/xml" + "flag" + "fmt" + "image/color" + "os" + "reflect" + "strconv" + "strings" +) + +var delim string + +func init() { + flag.StringVar(&delim, "d", "\t", "indicate field delimiter of input") + flag.Parse() +} + +type Colors struct { + Sequential []Scheme `xml:"sequential>scheme"` + Diverging []Scheme `xml:"diverging>scheme"` + Qualitative []Scheme `xml:"categorical>scheme"` +} + +type Scheme struct { + ID string `xml:"id,attr"` + Name string `xml:"name"` + Class []Class `xml:"class"` +} + +type Class struct { + Laptop *string `xml:"laptop"` + CRT *string `xml:"crt"` + ColorBlind *string `xml:"eye"` + Copy *string `xml:"copy"` + Projector *string `xml:"projector"` + Color []Color `xml:"color"` +} + +type Color struct { + RGB string `xml:"rgb"` + Hex string `xml:"hex"` + CMYK string `xml:"cmyk"` +} + +var ( + usability = map[string]string{"x": "Bad", "q": "Unsure", "": "Good"} + class = map[string]string{"Diverging": "Diverging", "Qualitative": "NonDiverging", "Sequential": "NonDiverging"} +) + +func mustAtoi(f string, base int) byte { + i, err := strconv.ParseUint(f, base, 8) + if err != nil { + panic(err) + } + return byte(i) +} + +func getLetters(f string) map[string]map[color.RGBA]byte { + letters := make(map[string]map[color.RGBA]byte) + + lf, err := os.Open(f) + if err != nil { + fmt.Printf("error: %v", err) + os.Exit(1) + } + + label := make(map[string]int) + scanner := bufio.NewScanner(lf) + var ( + lastType string + + last = make(map[string]string) + ) + + for scanner.Scan() { + line := scanner.Text() + if len(strings.TrimSpace(line)) == 0 { + break + } + fields := strings.Split(line, delim) + if fields[0] == "ColorName" { + for i, f := range fields { + label[f] = i + } + continue + } + if name := fields[label["ColorName"]]; len(name) != 0 { + l, ok := letters[name] + if !ok { + l = make(map[color.RGBA]byte) + letters[name] = l + } + if len(fields) > label["SchemeType"] { + if typ := fields[label["SchemeType"]]; len(typ) != 0 { + lastType = typ + } + } + if name != last[lastType] { + last[lastType] = name + } + } + letters[last[lastType]][color.RGBA{ + R: mustAtoi(fields[label["R"]], 10), + G: mustAtoi(fields[label["G"]], 10), + B: mustAtoi(fields[label["B"]], 10), + }] = fields[label["ColorLetter"]][0] + } + if err := scanner.Err(); err != nil { + fmt.Fprintln(os.Stderr, "reading standard input:", err) + os.Exit(1) + } + + return letters +} + +func main() { + var cols Colors + xf, err := os.Open(os.Args[1]) + if err != nil { + fmt.Printf("error: %v", err) + os.Exit(1) + } + dec := xml.NewDecoder(xf) + err = dec.Decode(&cols) + if err != nil { + fmt.Printf("error: %v", err) + os.Exit(1) + } + + letters := getLetters(os.Args[2]) + fmt.Println(`// Apache-Style Software License for ColorBrewer software and ColorBrewer Color Schemes +// +// Copyright ©2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software distributed +// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +// CONDITIONS OF ANY KIND, either express or implied. See the License for the +// specific language governing permissions and limitations under the License. +// Go implementation Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Go port Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Go port Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Palette Copyright ©2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University. + +package brewer + +import ( + "image/color" +) +`) + cv := reflect.ValueOf(cols) + ct := cv.Type() + for i := 0; i < cv.NumField(); i++ { + f := cv.Field(i) + n := ct.Field(i).Name + fmt.Println("var (") + for _, schm := range f.Interface().([]Scheme) { + fmt.Printf("\t%s = %s{\n", schm.ID, n, n) + for _, cls := range schm.Class { + fmt.Printf("\t\t%d: %sPalette{\n\t\t\tID: %q,\n\t\t\tName: %q,\n", + len(cls.Color), class[n], + schm.ID, schm.Name, + ) + clv := reflect.ValueOf(cls) + clt := clv.Type() + for j := 0; j < clv.NumField()-1; j++ { + clvf := clv.Field(j) + if clvf.IsNil() { + continue + } + fmt.Printf("\t\t\t%s: %s,\n", clt.Field(j).Name, usability[*clvf.Interface().(*string)]) + } + fmt.Println("\t\t\tColor: []color.Color{") + for _, col := range cls.Color { + r, g, b := mustAtoi(col.Hex[2:4], 16), mustAtoi(col.Hex[4:6], 16), mustAtoi(col.Hex[6:8], 16) + fmt.Printf("\t\t\t\tColor{%q, color.RGBA{0x%02x, 0x%02x, 0x%02x, 0xff}},\n", + letters[schm.ID][color.RGBA{r, g, b, 0}], r, g, b, + ) + } + fmt.Println("\t\t\t},\n\t\t},") + } + fmt.Println("\t}") + } + fmt.Println(")") + } + fmt.Println("var (") + for i := 0; i < cv.NumField(); i++ { + f := cv.Field(i) + n := ct.Field(i).Name + nl := strings.ToLower(n) + fmt.Printf("\t%s = map[string]%s{\n", nl, n) + for _, schm := range f.Interface().([]Scheme) { + fmt.Printf("\t\t%q: %s,\n", schm.ID, schm.ID) + } + fmt.Println("\t}") + } + fmt.Println("\tall = map[string]interface{}{") + for i := 0; i < cv.NumField(); i++ { + f := cv.Field(i) + for _, schm := range f.Interface().([]Scheme) { + fmt.Printf("\t\t%q: %s,\n", schm.ID, schm.ID) + } + } + fmt.Println("\t}") + fmt.Println(")") +} diff --git a/palette/brewer/generate_palettes.go b/palette/brewer/generate_palettes.go new file mode 100644 index 00000000..b2001240 --- /dev/null +++ b/palette/brewer/generate_palettes.go @@ -0,0 +1,163 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build ignore + +// This program generates a Brewer Palette Go source file from +// a csv/tsv file exported from the xls file available from +// http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_updates.html +// +// Run the program: +// go run generate_palettes < infile.tsv +package main + +import ( + "bufio" + "bytes" + "flag" + "fmt" + "os" + "strconv" + "strings" +) + +var ( + delim string + hex bool +) + +func init() { + flag.StringVar(&delim, "d", "\t", "indicate field delimiter of input") + flag.BoolVar(&hex, "hex", true, "indicate color values output in hex format") + flag.Parse() +} + +func mustAtoi(f string) byte { + i, err := strconv.Atoi(f) + if err != nil { + panic(err) + } + if i < 0 || i > 0xff { + panic(fmt.Sprintf("byte out of range", i)) + } + return byte(i) +} + +func main() { + fmt.Println(`// Apache-Style Software License for ColorBrewer software and ColorBrewer Color Schemes +// +// Copyright ©2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software distributed +// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +// CONDITIONS OF ANY KIND, either express or implied. See the License for the +// specific language governing permissions and limitations under the License. +// Go implementation Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Go port Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Go port Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Palette Copyright ©2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University. + +package brewer + +import ( + "image/color" +) +`) + label := make(map[string]int) + scanner := bufio.NewScanner(os.Stdin) + var ( + lastType string + + last = make(map[string]string) + + defBuf = map[string]*bytes.Buffer{ + "Qualitative": &bytes.Buffer{}, + "Sequential": &bytes.Buffer{}, + "Diverging": &bytes.Buffer{}, + } + + cls = map[string]string{"Diverging": "Diverging", "Qualitative": "NonDiverging", "Sequential": "NonDiverging"} + + lookBuf = make(map[string][]string) + ) + + for scanner.Scan() { + line := scanner.Text() + if len(strings.TrimSpace(line)) == 0 { + break + } + fields := strings.Split(line, delim) + if fields[0] == "ColorName" { + for i, f := range fields { + label[f] = i + } + continue + } + if name := fields[label["ColorName"]]; len(name) != 0 { + if len(fields) > label["SchemeType"] { + if typ := fields[label["SchemeType"]]; len(typ) != 0 { + lastType = typ + } + } + if name != last[lastType] { + lookBuf[lastType] = append(lookBuf[lastType], fmt.Sprintf("%q: %s", name, name)) + if last[lastType] != "" { + fmt.Fprintf(defBuf[lastType], "\t\t\t},\n\t\t},\n\t}\n") + } + fmt.Fprintf(defBuf[lastType], "\t%s %s = %s{\n", fields[label["ColorName"]], lastType, lastType) + last[lastType] = name + } else { + fmt.Fprintf(defBuf[lastType], "\t\t\t},\n\t\t},\n") + } + fmt.Fprintf(defBuf[lastType], "\t\t%d: %sPalette{\n\t\t\tID: %q,\n\t\t\tColor: []color.Color{\n", + mustAtoi(fields[label["NumOfColors"]]), cls[lastType], last[lastType]) + } + values := []interface{}{ + fields[label["ColorLetter"]], + mustAtoi(fields[label["R"]]), + mustAtoi(fields[label["G"]]), + mustAtoi(fields[label["B"]]), + } + if hex { + fmt.Fprintf(defBuf[lastType], "\t\t\t\tColor{'%s', color.RGBA{0x%02x, 0x%02x, 0x%02x, 0xff}},\n", values...) + } else { + fmt.Fprintf(defBuf[lastType], "\t\t\t\tColor{'%s', color.RGBA{0x%02x, 0x%02x, 0x%02x, 0xff}},\n", values...) + } + } + if err := scanner.Err(); err != nil { + fmt.Fprintln(os.Stderr, "reading standard input:", err) + os.Exit(1) + } + for _, typ := range []string{"Diverging", "Qualitative", "Sequential"} { + fmt.Printf("var (\n%s\t\t\t},\n\t\t},\n\t}\n)\n", defBuf[typ].Bytes()) + } + fmt.Println("\nvar (") + for _, typ := range []string{"Diverging", "Qualitative", "Sequential"} { + fmt.Printf("\t%s = map[string]%s{\n\t\t%v,\n\t}\n", strings.ToLower(typ), typ, strings.Join(lookBuf[typ], ",\n\t\t")) + } + fmt.Println("\tall = map[string]interface{}{") + for _, typ := range []string{"Diverging", "Qualitative", "Sequential"} { + fmt.Printf("\t\t%v,\n", strings.Join(lookBuf[typ], ",\n\t\t")) + } + fmt.Println("\t}\n)") +} diff --git a/palette/brewer/palettes.go b/palette/brewer/palettes.go new file mode 100644 index 00000000..e46be118 --- /dev/null +++ b/palette/brewer/palettes.go @@ -0,0 +1,4795 @@ +// Apache-Style Software License for ColorBrewer software and ColorBrewer Color Schemes +// +// Copyright ©2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software distributed +// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR +// CONDITIONS OF ANY KIND, either express or implied. See the License for the +// specific language governing permissions and limitations under the License. +// Go implementation Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Go port Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Go port Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Palette Copyright ©2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University. + +package brewer + +import ( + "image/color" +) + +var ( + BrBG = Diverging{ + 3: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xd8, 0xb3, 0x65, 0xff}}, + Color{'H', color.RGBA{0xf5, 0xf5, 0xf5, 0xff}}, + Color{'K', color.RGBA{0x5a, 0xb4, 0xac, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xa6, 0x61, 0x1a, 0xff}}, + Color{'F', color.RGBA{0xdf, 0xc2, 0x7d, 0xff}}, + Color{'J', color.RGBA{0x80, 0xcd, 0xc1, 0xff}}, + Color{'M', color.RGBA{0x01, 0x85, 0x71, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xa6, 0x61, 0x1a, 0xff}}, + Color{'F', color.RGBA{0xdf, 0xc2, 0x7d, 0xff}}, + Color{'H', color.RGBA{0xf5, 0xf5, 0xf5, 0xff}}, + Color{'J', color.RGBA{0x80, 0xcd, 0xc1, 0xff}}, + Color{'M', color.RGBA{0x01, 0x85, 0x71, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0x8c, 0x51, 0x0a, 0xff}}, + Color{'E', color.RGBA{0xd8, 0xb3, 0x65, 0xff}}, + Color{'G', color.RGBA{0xf6, 0xe8, 0xc3, 0xff}}, + Color{'I', color.RGBA{0xc7, 0xea, 0xe5, 0xff}}, + Color{'K', color.RGBA{0x5a, 0xb4, 0xac, 0xff}}, + Color{'N', color.RGBA{0x01, 0x66, 0x5e, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0x8c, 0x51, 0x0a, 0xff}}, + Color{'E', color.RGBA{0xd8, 0xb3, 0x65, 0xff}}, + Color{'G', color.RGBA{0xf6, 0xe8, 0xc3, 0xff}}, + Color{'H', color.RGBA{0xf5, 0xf5, 0xf5, 0xff}}, + Color{'I', color.RGBA{0xc7, 0xea, 0xe5, 0xff}}, + Color{'K', color.RGBA{0x5a, 0xb4, 0xac, 0xff}}, + Color{'N', color.RGBA{0x01, 0x66, 0x5e, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0x8c, 0x51, 0x0a, 0xff}}, + Color{'D', color.RGBA{0xbf, 0x81, 0x2d, 0xff}}, + Color{'F', color.RGBA{0xdf, 0xc2, 0x7d, 0xff}}, + Color{'G', color.RGBA{0xf6, 0xe8, 0xc3, 0xff}}, + Color{'I', color.RGBA{0xc7, 0xea, 0xe5, 0xff}}, + Color{'J', color.RGBA{0x80, 0xcd, 0xc1, 0xff}}, + Color{'L', color.RGBA{0x35, 0x97, 0x8f, 0xff}}, + Color{'N', color.RGBA{0x01, 0x66, 0x5e, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0x8c, 0x51, 0x0a, 0xff}}, + Color{'D', color.RGBA{0xbf, 0x81, 0x2d, 0xff}}, + Color{'F', color.RGBA{0xdf, 0xc2, 0x7d, 0xff}}, + Color{'G', color.RGBA{0xf6, 0xe8, 0xc3, 0xff}}, + Color{'H', color.RGBA{0xf5, 0xf5, 0xf5, 0xff}}, + Color{'I', color.RGBA{0xc7, 0xea, 0xe5, 0xff}}, + Color{'J', color.RGBA{0x80, 0xcd, 0xc1, 0xff}}, + Color{'L', color.RGBA{0x35, 0x97, 0x8f, 0xff}}, + Color{'N', color.RGBA{0x01, 0x66, 0x5e, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x54, 0x30, 0x05, 0xff}}, + Color{'B', color.RGBA{0x8c, 0x51, 0x0a, 0xff}}, + Color{'D', color.RGBA{0xbf, 0x81, 0x2d, 0xff}}, + Color{'F', color.RGBA{0xdf, 0xc2, 0x7d, 0xff}}, + Color{'G', color.RGBA{0xf6, 0xe8, 0xc3, 0xff}}, + Color{'I', color.RGBA{0xc7, 0xea, 0xe5, 0xff}}, + Color{'J', color.RGBA{0x80, 0xcd, 0xc1, 0xff}}, + Color{'L', color.RGBA{0x35, 0x97, 0x8f, 0xff}}, + Color{'N', color.RGBA{0x01, 0x66, 0x5e, 0xff}}, + Color{'O', color.RGBA{0x00, 0x3c, 0x30, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "BrBG", + Name: "Brown-Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x54, 0x30, 0x05, 0xff}}, + Color{'B', color.RGBA{0x8c, 0x51, 0x0a, 0xff}}, + Color{'D', color.RGBA{0xbf, 0x81, 0x2d, 0xff}}, + Color{'F', color.RGBA{0xdf, 0xc2, 0x7d, 0xff}}, + Color{'G', color.RGBA{0xf6, 0xe8, 0xc3, 0xff}}, + Color{'H', color.RGBA{0xf5, 0xf5, 0xf5, 0xff}}, + Color{'I', color.RGBA{0xc7, 0xea, 0xe5, 0xff}}, + Color{'J', color.RGBA{0x80, 0xcd, 0xc1, 0xff}}, + Color{'L', color.RGBA{0x35, 0x97, 0x8f, 0xff}}, + Color{'N', color.RGBA{0x01, 0x66, 0x5e, 0xff}}, + Color{'O', color.RGBA{0x00, 0x3c, 0x30, 0xff}}, + }, + }, + } + PiYG = Diverging{ + 3: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xe9, 0xa3, 0xc9, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'K', color.RGBA{0xa1, 0xd7, 0x6a, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xd0, 0x1c, 0x8b, 0xff}}, + Color{'F', color.RGBA{0xf1, 0xb6, 0xda, 0xff}}, + Color{'J', color.RGBA{0xb8, 0xe1, 0x86, 0xff}}, + Color{'M', color.RGBA{0x4d, 0xac, 0x26, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Unsure, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xd0, 0x1c, 0x8b, 0xff}}, + Color{'F', color.RGBA{0xf1, 0xb6, 0xda, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'J', color.RGBA{0xb8, 0xe1, 0x86, 0xff}}, + Color{'M', color.RGBA{0x4d, 0xac, 0x26, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xc5, 0x1b, 0x7d, 0xff}}, + Color{'E', color.RGBA{0xe9, 0xa3, 0xc9, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xe0, 0xef, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0xd0, 0xff}}, + Color{'K', color.RGBA{0xa1, 0xd7, 0x6a, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x92, 0x21, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xc5, 0x1b, 0x7d, 0xff}}, + Color{'E', color.RGBA{0xe9, 0xa3, 0xc9, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xe0, 0xef, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0xd0, 0xff}}, + Color{'K', color.RGBA{0xa1, 0xd7, 0x6a, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x92, 0x21, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xc5, 0x1b, 0x7d, 0xff}}, + Color{'D', color.RGBA{0xde, 0x77, 0xae, 0xff}}, + Color{'F', color.RGBA{0xf1, 0xb6, 0xda, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xe0, 0xef, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0xd0, 0xff}}, + Color{'J', color.RGBA{0xb8, 0xe1, 0x86, 0xff}}, + Color{'L', color.RGBA{0x7f, 0xbc, 0x41, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x92, 0x21, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xc5, 0x1b, 0x7d, 0xff}}, + Color{'D', color.RGBA{0xde, 0x77, 0xae, 0xff}}, + Color{'F', color.RGBA{0xf1, 0xb6, 0xda, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xe0, 0xef, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0xd0, 0xff}}, + Color{'J', color.RGBA{0xb8, 0xe1, 0x86, 0xff}}, + Color{'L', color.RGBA{0x7f, 0xbc, 0x41, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x92, 0x21, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x8e, 0x01, 0x52, 0xff}}, + Color{'B', color.RGBA{0xc5, 0x1b, 0x7d, 0xff}}, + Color{'D', color.RGBA{0xde, 0x77, 0xae, 0xff}}, + Color{'F', color.RGBA{0xf1, 0xb6, 0xda, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xe0, 0xef, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0xd0, 0xff}}, + Color{'J', color.RGBA{0xb8, 0xe1, 0x86, 0xff}}, + Color{'L', color.RGBA{0x7f, 0xbc, 0x41, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x92, 0x21, 0xff}}, + Color{'O', color.RGBA{0x27, 0x64, 0x19, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "PiYG", + Name: "Pink-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x8e, 0x01, 0x52, 0xff}}, + Color{'B', color.RGBA{0xc5, 0x1b, 0x7d, 0xff}}, + Color{'D', color.RGBA{0xde, 0x77, 0xae, 0xff}}, + Color{'F', color.RGBA{0xf1, 0xb6, 0xda, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xe0, 0xef, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0xd0, 0xff}}, + Color{'J', color.RGBA{0xb8, 0xe1, 0x86, 0xff}}, + Color{'L', color.RGBA{0x7f, 0xbc, 0x41, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x92, 0x21, 0xff}}, + Color{'O', color.RGBA{0x27, 0x64, 0x19, 0xff}}, + }, + }, + } + PRGn = Diverging{ + 3: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xaf, 0x8d, 0xc3, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'K', color.RGBA{0x7f, 0xbf, 0x7b, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0x7b, 0x32, 0x94, 0xff}}, + Color{'F', color.RGBA{0xc2, 0xa5, 0xcf, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xdb, 0xa0, 0xff}}, + Color{'M', color.RGBA{0x00, 0x88, 0x37, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0x7b, 0x32, 0x94, 0xff}}, + Color{'F', color.RGBA{0xc2, 0xa5, 0xcf, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xdb, 0xa0, 0xff}}, + Color{'M', color.RGBA{0x00, 0x88, 0x37, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0x76, 0x2a, 0x83, 0xff}}, + Color{'E', color.RGBA{0xaf, 0x8d, 0xc3, 0xff}}, + Color{'G', color.RGBA{0xe7, 0xd4, 0xe8, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xf0, 0xd3, 0xff}}, + Color{'K', color.RGBA{0x7f, 0xbf, 0x7b, 0xff}}, + Color{'N', color.RGBA{0x1b, 0x78, 0x37, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0x76, 0x2a, 0x83, 0xff}}, + Color{'E', color.RGBA{0xaf, 0x8d, 0xc3, 0xff}}, + Color{'G', color.RGBA{0xe7, 0xd4, 0xe8, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xf0, 0xd3, 0xff}}, + Color{'K', color.RGBA{0x7f, 0xbf, 0x7b, 0xff}}, + Color{'N', color.RGBA{0x1b, 0x78, 0x37, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0x76, 0x2a, 0x83, 0xff}}, + Color{'D', color.RGBA{0x99, 0x70, 0xab, 0xff}}, + Color{'F', color.RGBA{0xc2, 0xa5, 0xcf, 0xff}}, + Color{'G', color.RGBA{0xe7, 0xd4, 0xe8, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xf0, 0xd3, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xdb, 0xa0, 0xff}}, + Color{'L', color.RGBA{0x5a, 0xae, 0x61, 0xff}}, + Color{'N', color.RGBA{0x1b, 0x78, 0x37, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0x76, 0x2a, 0x83, 0xff}}, + Color{'D', color.RGBA{0x99, 0x70, 0xab, 0xff}}, + Color{'F', color.RGBA{0xc2, 0xa5, 0xcf, 0xff}}, + Color{'G', color.RGBA{0xe7, 0xd4, 0xe8, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xf0, 0xd3, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xdb, 0xa0, 0xff}}, + Color{'L', color.RGBA{0x5a, 0xae, 0x61, 0xff}}, + Color{'N', color.RGBA{0x1b, 0x78, 0x37, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x40, 0x00, 0x4b, 0xff}}, + Color{'B', color.RGBA{0x76, 0x2a, 0x83, 0xff}}, + Color{'D', color.RGBA{0x99, 0x70, 0xab, 0xff}}, + Color{'F', color.RGBA{0xc2, 0xa5, 0xcf, 0xff}}, + Color{'G', color.RGBA{0xe7, 0xd4, 0xe8, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xf0, 0xd3, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xdb, 0xa0, 0xff}}, + Color{'L', color.RGBA{0x5a, 0xae, 0x61, 0xff}}, + Color{'N', color.RGBA{0x1b, 0x78, 0x37, 0xff}}, + Color{'O', color.RGBA{0x00, 0x44, 0x1b, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "PRGn", + Name: "Purple-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x40, 0x00, 0x4b, 0xff}}, + Color{'B', color.RGBA{0x76, 0x2a, 0x83, 0xff}}, + Color{'D', color.RGBA{0x99, 0x70, 0xab, 0xff}}, + Color{'F', color.RGBA{0xc2, 0xa5, 0xcf, 0xff}}, + Color{'G', color.RGBA{0xe7, 0xd4, 0xe8, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xf0, 0xd3, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xdb, 0xa0, 0xff}}, + Color{'L', color.RGBA{0x5a, 0xae, 0x61, 0xff}}, + Color{'N', color.RGBA{0x1b, 0x78, 0x37, 0xff}}, + Color{'O', color.RGBA{0x00, 0x44, 0x1b, 0xff}}, + }, + }, + } + PuOr = Diverging{ + 3: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xf1, 0xa3, 0x40, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'K', color.RGBA{0x99, 0x8e, 0xc3, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xe6, 0x61, 0x01, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb8, 0x63, 0xff}}, + Color{'J', color.RGBA{0xb2, 0xab, 0xd2, 0xff}}, + Color{'M', color.RGBA{0x5e, 0x3c, 0x99, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xe6, 0x61, 0x01, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb8, 0x63, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'J', color.RGBA{0xb2, 0xab, 0xd2, 0xff}}, + Color{'M', color.RGBA{0x5e, 0x3c, 0x99, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xb3, 0x58, 0x06, 0xff}}, + Color{'E', color.RGBA{0xf1, 0xa3, 0x40, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0xb6, 0xff}}, + Color{'I', color.RGBA{0xd8, 0xda, 0xeb, 0xff}}, + Color{'K', color.RGBA{0x99, 0x8e, 0xc3, 0xff}}, + Color{'N', color.RGBA{0x54, 0x27, 0x88, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb3, 0x58, 0x06, 0xff}}, + Color{'E', color.RGBA{0xf1, 0xa3, 0x40, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0xb6, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd8, 0xda, 0xeb, 0xff}}, + Color{'K', color.RGBA{0x99, 0x8e, 0xc3, 0xff}}, + Color{'N', color.RGBA{0x54, 0x27, 0x88, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb3, 0x58, 0x06, 0xff}}, + Color{'D', color.RGBA{0xe0, 0x82, 0x14, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb8, 0x63, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0xb6, 0xff}}, + Color{'I', color.RGBA{0xd8, 0xda, 0xeb, 0xff}}, + Color{'J', color.RGBA{0xb2, 0xab, 0xd2, 0xff}}, + Color{'L', color.RGBA{0x80, 0x73, 0xac, 0xff}}, + Color{'N', color.RGBA{0x54, 0x27, 0x88, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb3, 0x58, 0x06, 0xff}}, + Color{'D', color.RGBA{0xe0, 0x82, 0x14, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb8, 0x63, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0xb6, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd8, 0xda, 0xeb, 0xff}}, + Color{'J', color.RGBA{0xb2, 0xab, 0xd2, 0xff}}, + Color{'L', color.RGBA{0x80, 0x73, 0xac, 0xff}}, + Color{'N', color.RGBA{0x54, 0x27, 0x88, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x7f, 0x3b, 0x08, 0xff}}, + Color{'B', color.RGBA{0xb3, 0x58, 0x06, 0xff}}, + Color{'D', color.RGBA{0xe0, 0x82, 0x14, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb8, 0x63, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0xb6, 0xff}}, + Color{'I', color.RGBA{0xd8, 0xda, 0xeb, 0xff}}, + Color{'J', color.RGBA{0xb2, 0xab, 0xd2, 0xff}}, + Color{'L', color.RGBA{0x80, 0x73, 0xac, 0xff}}, + Color{'N', color.RGBA{0x54, 0x27, 0x88, 0xff}}, + Color{'O', color.RGBA{0x2d, 0x00, 0x4b, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "PuOr", + Name: "Purple-Orange", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x7f, 0x3b, 0x08, 0xff}}, + Color{'B', color.RGBA{0xb3, 0x58, 0x06, 0xff}}, + Color{'D', color.RGBA{0xe0, 0x82, 0x14, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb8, 0x63, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0xb6, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd8, 0xda, 0xeb, 0xff}}, + Color{'J', color.RGBA{0xb2, 0xab, 0xd2, 0xff}}, + Color{'L', color.RGBA{0x80, 0x73, 0xac, 0xff}}, + Color{'N', color.RGBA{0x54, 0x27, 0x88, 0xff}}, + Color{'O', color.RGBA{0x2d, 0x00, 0x4b, 0xff}}, + }, + }, + } + RdBu = Diverging{ + 3: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xef, 0x8a, 0x62, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'K', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xca, 0x00, 0x20, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'J', color.RGBA{0x92, 0xc5, 0xde, 0xff}}, + Color{'M', color.RGBA{0x05, 0x71, 0xb0, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'C', color.RGBA{0xca, 0x00, 0x20, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'J', color.RGBA{0x92, 0xc5, 0xde, 0xff}}, + Color{'M', color.RGBA{0x05, 0x71, 0xb0, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'E', color.RGBA{0xef, 0x8a, 0x62, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'I', color.RGBA{0xd1, 0xe5, 0xf0, 0xff}}, + Color{'K', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + Color{'N', color.RGBA{0x21, 0x66, 0xac, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'E', color.RGBA{0xef, 0x8a, 0x62, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd1, 0xe5, 0xf0, 0xff}}, + Color{'K', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + Color{'N', color.RGBA{0x21, 0x66, 0xac, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'D', color.RGBA{0xd6, 0x60, 0x4d, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'I', color.RGBA{0xd1, 0xe5, 0xf0, 0xff}}, + Color{'J', color.RGBA{0x92, 0xc5, 0xde, 0xff}}, + Color{'L', color.RGBA{0x43, 0x93, 0xc3, 0xff}}, + Color{'N', color.RGBA{0x21, 0x66, 0xac, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'D', color.RGBA{0xd6, 0x60, 0x4d, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd1, 0xe5, 0xf0, 0xff}}, + Color{'J', color.RGBA{0x92, 0xc5, 0xde, 0xff}}, + Color{'L', color.RGBA{0x43, 0x93, 0xc3, 0xff}}, + Color{'N', color.RGBA{0x21, 0x66, 0xac, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x67, 0x00, 0x1f, 0xff}}, + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'D', color.RGBA{0xd6, 0x60, 0x4d, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'I', color.RGBA{0xd1, 0xe5, 0xf0, 0xff}}, + Color{'J', color.RGBA{0x92, 0xc5, 0xde, 0xff}}, + Color{'L', color.RGBA{0x43, 0x93, 0xc3, 0xff}}, + Color{'N', color.RGBA{0x21, 0x66, 0xac, 0xff}}, + Color{'O', color.RGBA{0x05, 0x30, 0x61, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "RdBu", + Name: "Red-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x67, 0x00, 0x1f, 0xff}}, + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'D', color.RGBA{0xd6, 0x60, 0x4d, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'H', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'I', color.RGBA{0xd1, 0xe5, 0xf0, 0xff}}, + Color{'J', color.RGBA{0x92, 0xc5, 0xde, 0xff}}, + Color{'L', color.RGBA{0x43, 0x93, 0xc3, 0xff}}, + Color{'N', color.RGBA{0x21, 0x66, 0xac, 0xff}}, + Color{'O', color.RGBA{0x05, 0x30, 0x61, 0xff}}, + }, + }, + } + RdGy = Diverging{ + 3: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xef, 0x8a, 0x62, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xff, 0xff}}, + Color{'K', color.RGBA{0x99, 0x99, 0x99, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xca, 0x00, 0x20, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'J', color.RGBA{0xba, 0xba, 0xba, 0xff}}, + Color{'M', color.RGBA{0x40, 0x40, 0x40, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Unsure, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xca, 0x00, 0x20, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xff, 0xff}}, + Color{'J', color.RGBA{0xba, 0xba, 0xba, 0xff}}, + Color{'M', color.RGBA{0x40, 0x40, 0x40, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Bad, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'E', color.RGBA{0xef, 0x8a, 0x62, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xe0, 0xe0, 0xff}}, + Color{'K', color.RGBA{0x99, 0x99, 0x99, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x4d, 0x4d, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Bad, + CRT: Bad, + ColorBlind: Unsure, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'E', color.RGBA{0xef, 0x8a, 0x62, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xff, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xe0, 0xe0, 0xff}}, + Color{'K', color.RGBA{0x99, 0x99, 0x99, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x4d, 0x4d, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Bad, + CRT: Bad, + ColorBlind: Unsure, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'D', color.RGBA{0xd6, 0x60, 0x4d, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xe0, 0xe0, 0xff}}, + Color{'J', color.RGBA{0xba, 0xba, 0xba, 0xff}}, + Color{'L', color.RGBA{0x87, 0x87, 0x87, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x4d, 0x4d, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Bad, + CRT: Bad, + ColorBlind: Unsure, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'D', color.RGBA{0xd6, 0x60, 0x4d, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xff, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xe0, 0xe0, 0xff}}, + Color{'J', color.RGBA{0xba, 0xba, 0xba, 0xff}}, + Color{'L', color.RGBA{0x87, 0x87, 0x87, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x4d, 0x4d, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Bad, + CRT: Bad, + ColorBlind: Unsure, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x67, 0x00, 0x1f, 0xff}}, + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'D', color.RGBA{0xd6, 0x60, 0x4d, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xe0, 0xe0, 0xff}}, + Color{'J', color.RGBA{0xba, 0xba, 0xba, 0xff}}, + Color{'L', color.RGBA{0x87, 0x87, 0x87, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x4d, 0x4d, 0xff}}, + Color{'O', color.RGBA{0x1a, 0x1a, 0x1a, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "RdGy", + Name: "Red-Grey", + Laptop: Bad, + CRT: Bad, + ColorBlind: Unsure, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x67, 0x00, 0x1f, 0xff}}, + Color{'B', color.RGBA{0xb2, 0x18, 0x2b, 0xff}}, + Color{'D', color.RGBA{0xd6, 0x60, 0x4d, 0xff}}, + Color{'F', color.RGBA{0xf4, 0xa5, 0x82, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xdb, 0xc7, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xff, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xe0, 0xe0, 0xff}}, + Color{'J', color.RGBA{0xba, 0xba, 0xba, 0xff}}, + Color{'L', color.RGBA{0x87, 0x87, 0x87, 0xff}}, + Color{'N', color.RGBA{0x4d, 0x4d, 0x4d, 0xff}}, + Color{'O', color.RGBA{0x1a, 0x1a, 0x1a, 0xff}}, + }, + }, + } + RdYlBu = Diverging{ + 3: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'K', color.RGBA{0x91, 0xbf, 0xdb, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xd7, 0x19, 0x1c, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'J', color.RGBA{0xab, 0xd9, 0xe9, 0xff}}, + Color{'M', color.RGBA{0x2c, 0x7b, 0xb6, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xd7, 0x19, 0x1c, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'J', color.RGBA{0xab, 0xd9, 0xe9, 0xff}}, + Color{'M', color.RGBA{0x2c, 0x7b, 0xb6, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x90, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xf3, 0xf8, 0xff}}, + Color{'K', color.RGBA{0x91, 0xbf, 0xdb, 0xff}}, + Color{'N', color.RGBA{0x45, 0x75, 0xb4, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x90, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xf3, 0xf8, 0xff}}, + Color{'K', color.RGBA{0x91, 0xbf, 0xdb, 0xff}}, + Color{'N', color.RGBA{0x45, 0x75, 0xb4, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x90, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xf3, 0xf8, 0xff}}, + Color{'J', color.RGBA{0xab, 0xd9, 0xe9, 0xff}}, + Color{'L', color.RGBA{0x74, 0xad, 0xd1, 0xff}}, + Color{'N', color.RGBA{0x45, 0x75, 0xb4, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x90, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xf3, 0xf8, 0xff}}, + Color{'J', color.RGBA{0xab, 0xd9, 0xe9, 0xff}}, + Color{'L', color.RGBA{0x74, 0xad, 0xd1, 0xff}}, + Color{'N', color.RGBA{0x45, 0x75, 0xb4, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xa5, 0x00, 0x26, 0xff}}, + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x90, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xf3, 0xf8, 0xff}}, + Color{'J', color.RGBA{0xab, 0xd9, 0xe9, 0xff}}, + Color{'L', color.RGBA{0x74, 0xad, 0xd1, 0xff}}, + Color{'N', color.RGBA{0x45, 0x75, 0xb4, 0xff}}, + Color{'O', color.RGBA{0x31, 0x36, 0x95, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "RdYlBu", + Name: "Red-Yellow-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xa5, 0x00, 0x26, 0xff}}, + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x90, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xe0, 0xf3, 0xf8, 0xff}}, + Color{'J', color.RGBA{0xab, 0xd9, 0xe9, 0xff}}, + Color{'L', color.RGBA{0x74, 0xad, 0xd1, 0xff}}, + Color{'N', color.RGBA{0x45, 0x75, 0xb4, 0xff}}, + Color{'O', color.RGBA{0x31, 0x36, 0x95, 0xff}}, + }, + }, + } + RdYlGn = Diverging{ + 3: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'K', color.RGBA{0x91, 0xcf, 0x60, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xd7, 0x19, 0x1c, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xd9, 0x6a, 0xff}}, + Color{'M', color.RGBA{0x1a, 0x96, 0x41, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xd7, 0x19, 0x1c, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xd9, 0x6a, 0xff}}, + Color{'M', color.RGBA{0x1a, 0x96, 0x41, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xef, 0x8b, 0xff}}, + Color{'K', color.RGBA{0x91, 0xcf, 0x60, 0xff}}, + Color{'N', color.RGBA{0x1a, 0x98, 0x50, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xef, 0x8b, 0xff}}, + Color{'K', color.RGBA{0x91, 0xcf, 0x60, 0xff}}, + Color{'N', color.RGBA{0x1a, 0x98, 0x50, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xef, 0x8b, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xd9, 0x6a, 0xff}}, + Color{'L', color.RGBA{0x66, 0xbd, 0x63, 0xff}}, + Color{'N', color.RGBA{0x1a, 0x98, 0x50, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xef, 0x8b, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xd9, 0x6a, 0xff}}, + Color{'L', color.RGBA{0x66, 0xbd, 0x63, 0xff}}, + Color{'N', color.RGBA{0x1a, 0x98, 0x50, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xa5, 0x00, 0x26, 0xff}}, + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xef, 0x8b, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xd9, 0x6a, 0xff}}, + Color{'L', color.RGBA{0x66, 0xbd, 0x63, 0xff}}, + Color{'N', color.RGBA{0x1a, 0x98, 0x50, 0xff}}, + Color{'O', color.RGBA{0x00, 0x68, 0x37, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "RdYlGn", + Name: "Red-Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xa5, 0x00, 0x26, 0xff}}, + Color{'B', color.RGBA{0xd7, 0x30, 0x27, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xef, 0x8b, 0xff}}, + Color{'J', color.RGBA{0xa6, 0xd9, 0x6a, 0xff}}, + Color{'L', color.RGBA{0x66, 0xbd, 0x63, 0xff}}, + Color{'N', color.RGBA{0x1a, 0x98, 0x50, 0xff}}, + Color{'O', color.RGBA{0x00, 0x68, 0x37, 0xff}}, + }, + }, + } + Spectral = Diverging{ + 3: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'K', color.RGBA{0x99, 0xd5, 0x94, 0xff}}, + }, + }, + 4: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xd7, 0x19, 0x1c, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'J', color.RGBA{0xab, 0xdd, 0xa4, 0xff}}, + Color{'M', color.RGBA{0x2b, 0x83, 0xba, 0xff}}, + }, + }, + 5: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xd7, 0x19, 0x1c, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'J', color.RGBA{0xab, 0xdd, 0xa4, 0xff}}, + Color{'M', color.RGBA{0x2b, 0x83, 0xba, 0xff}}, + }, + }, + 6: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd5, 0x3e, 0x4f, 0xff}}, + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0x98, 0xff}}, + Color{'K', color.RGBA{0x99, 0xd5, 0x94, 0xff}}, + Color{'N', color.RGBA{0x32, 0x88, 0xbd, 0xff}}, + }, + }, + 7: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd5, 0x3e, 0x4f, 0xff}}, + Color{'E', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0x98, 0xff}}, + Color{'K', color.RGBA{0x99, 0xd5, 0x94, 0xff}}, + Color{'N', color.RGBA{0x32, 0x88, 0xbd, 0xff}}, + }, + }, + 8: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd5, 0x3e, 0x4f, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0x98, 0xff}}, + Color{'J', color.RGBA{0xab, 0xdd, 0xa4, 0xff}}, + Color{'L', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'N', color.RGBA{0x32, 0x88, 0xbd, 0xff}}, + }, + }, + 9: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xd5, 0x3e, 0x4f, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0x98, 0xff}}, + Color{'J', color.RGBA{0xab, 0xdd, 0xa4, 0xff}}, + Color{'L', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'N', color.RGBA{0x32, 0x88, 0xbd, 0xff}}, + }, + }, + 10: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x9e, 0x01, 0x42, 0xff}}, + Color{'B', color.RGBA{0xd5, 0x3e, 0x4f, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0x98, 0xff}}, + Color{'J', color.RGBA{0xab, 0xdd, 0xa4, 0xff}}, + Color{'L', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'N', color.RGBA{0x32, 0x88, 0xbd, 0xff}}, + Color{'O', color.RGBA{0x5e, 0x4f, 0xa2, 0xff}}, + }, + }, + 11: DivergingPalette{ + ID: "Spectral", + Name: "Spectral", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x9e, 0x01, 0x42, 0xff}}, + Color{'B', color.RGBA{0xd5, 0x3e, 0x4f, 0xff}}, + Color{'D', color.RGBA{0xf4, 0x6d, 0x43, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x61, 0xff}}, + Color{'G', color.RGBA{0xfe, 0xe0, 0x8b, 0xff}}, + Color{'H', color.RGBA{0xff, 0xff, 0xbf, 0xff}}, + Color{'I', color.RGBA{0xe6, 0xf5, 0x98, 0xff}}, + Color{'J', color.RGBA{0xab, 0xdd, 0xa4, 0xff}}, + Color{'L', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'N', color.RGBA{0x32, 0x88, 0xbd, 0xff}}, + Color{'O', color.RGBA{0x5e, 0x4f, 0xa2, 0xff}}, + }, + }, + } +) +var ( + Accent = Qualitative{ + 3: NonDivergingPalette{ + ID: "Accent", + Name: "Accent", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x7f, 0xc9, 0x7f, 0xff}}, + Color{'B', color.RGBA{0xbe, 0xae, 0xd4, 0xff}}, + Color{'C', color.RGBA{0xfd, 0xc0, 0x86, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Accent", + Name: "Accent", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x7f, 0xc9, 0x7f, 0xff}}, + Color{'B', color.RGBA{0xbe, 0xae, 0xd4, 0xff}}, + Color{'C', color.RGBA{0xfd, 0xc0, 0x86, 0xff}}, + Color{'D', color.RGBA{0xff, 0xff, 0x99, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Accent", + Name: "Accent", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x7f, 0xc9, 0x7f, 0xff}}, + Color{'B', color.RGBA{0xbe, 0xae, 0xd4, 0xff}}, + Color{'C', color.RGBA{0xfd, 0xc0, 0x86, 0xff}}, + Color{'D', color.RGBA{0xff, 0xff, 0x99, 0xff}}, + Color{'E', color.RGBA{0x38, 0x6c, 0xb0, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Accent", + Name: "Accent", + Laptop: Unsure, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x7f, 0xc9, 0x7f, 0xff}}, + Color{'B', color.RGBA{0xbe, 0xae, 0xd4, 0xff}}, + Color{'C', color.RGBA{0xfd, 0xc0, 0x86, 0xff}}, + Color{'D', color.RGBA{0xff, 0xff, 0x99, 0xff}}, + Color{'E', color.RGBA{0x38, 0x6c, 0xb0, 0xff}}, + Color{'F', color.RGBA{0xf0, 0x02, 0x7f, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Accent", + Name: "Accent", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Unsure, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x7f, 0xc9, 0x7f, 0xff}}, + Color{'B', color.RGBA{0xbe, 0xae, 0xd4, 0xff}}, + Color{'C', color.RGBA{0xfd, 0xc0, 0x86, 0xff}}, + Color{'D', color.RGBA{0xff, 0xff, 0x99, 0xff}}, + Color{'E', color.RGBA{0x38, 0x6c, 0xb0, 0xff}}, + Color{'F', color.RGBA{0xf0, 0x02, 0x7f, 0xff}}, + Color{'G', color.RGBA{0xbf, 0x5b, 0x17, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Accent", + Name: "Accent", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Unsure, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x7f, 0xc9, 0x7f, 0xff}}, + Color{'B', color.RGBA{0xbe, 0xae, 0xd4, 0xff}}, + Color{'C', color.RGBA{0xfd, 0xc0, 0x86, 0xff}}, + Color{'D', color.RGBA{0xff, 0xff, 0x99, 0xff}}, + Color{'E', color.RGBA{0x38, 0x6c, 0xb0, 0xff}}, + Color{'F', color.RGBA{0xf0, 0x02, 0x7f, 0xff}}, + Color{'G', color.RGBA{0xbf, 0x5b, 0x17, 0xff}}, + Color{'H', color.RGBA{0x66, 0x66, 0x66, 0xff}}, + }, + }, + } + Dark2 = Qualitative{ + 3: NonDivergingPalette{ + ID: "Dark2", + Name: "Dark 2", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x1b, 0x9e, 0x77, 0xff}}, + Color{'B', color.RGBA{0xd9, 0x5f, 0x02, 0xff}}, + Color{'C', color.RGBA{0x75, 0x70, 0xb3, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Dark2", + Name: "Dark 2", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x1b, 0x9e, 0x77, 0xff}}, + Color{'B', color.RGBA{0xd9, 0x5f, 0x02, 0xff}}, + Color{'C', color.RGBA{0x75, 0x70, 0xb3, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x29, 0x8a, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Dark2", + Name: "Dark 2", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x1b, 0x9e, 0x77, 0xff}}, + Color{'B', color.RGBA{0xd9, 0x5f, 0x02, 0xff}}, + Color{'C', color.RGBA{0x75, 0x70, 0xb3, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x29, 0x8a, 0xff}}, + Color{'E', color.RGBA{0x66, 0xa6, 0x1e, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Dark2", + Name: "Dark 2", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x1b, 0x9e, 0x77, 0xff}}, + Color{'B', color.RGBA{0xd9, 0x5f, 0x02, 0xff}}, + Color{'C', color.RGBA{0x75, 0x70, 0xb3, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x29, 0x8a, 0xff}}, + Color{'E', color.RGBA{0x66, 0xa6, 0x1e, 0xff}}, + Color{'F', color.RGBA{0xe6, 0xab, 0x02, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Dark2", + Name: "Dark 2", + Laptop: Good, + CRT: Good, + ColorBlind: Bad, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x1b, 0x9e, 0x77, 0xff}}, + Color{'B', color.RGBA{0xd9, 0x5f, 0x02, 0xff}}, + Color{'C', color.RGBA{0x75, 0x70, 0xb3, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x29, 0x8a, 0xff}}, + Color{'E', color.RGBA{0x66, 0xa6, 0x1e, 0xff}}, + Color{'F', color.RGBA{0xe6, 0xab, 0x02, 0xff}}, + Color{'G', color.RGBA{0xa6, 0x76, 0x1d, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Dark2", + Name: "Dark 2", + Laptop: Good, + CRT: Good, + ColorBlind: Bad, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x1b, 0x9e, 0x77, 0xff}}, + Color{'B', color.RGBA{0xd9, 0x5f, 0x02, 0xff}}, + Color{'C', color.RGBA{0x75, 0x70, 0xb3, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x29, 0x8a, 0xff}}, + Color{'E', color.RGBA{0x66, 0xa6, 0x1e, 0xff}}, + Color{'F', color.RGBA{0xe6, 0xab, 0x02, 0xff}}, + Color{'G', color.RGBA{0xa6, 0x76, 0x1d, 0xff}}, + Color{'H', color.RGBA{0x66, 0x66, 0x66, 0xff}}, + }, + }, + } + Paired = Qualitative{ + 3: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + Color{'E', color.RGBA{0xfb, 0x9a, 0x99, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + Color{'E', color.RGBA{0xfb, 0x9a, 0x99, 0xff}}, + Color{'F', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + Color{'E', color.RGBA{0xfb, 0x9a, 0x99, 0xff}}, + Color{'F', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xbf, 0x6f, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Good, + CRT: Unsure, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + Color{'E', color.RGBA{0xfb, 0x9a, 0x99, 0xff}}, + Color{'F', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xbf, 0x6f, 0xff}}, + Color{'H', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Good, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + Color{'E', color.RGBA{0xfb, 0x9a, 0x99, 0xff}}, + Color{'F', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xbf, 0x6f, 0xff}}, + Color{'H', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + Color{'I', color.RGBA{0xca, 0xb2, 0xd6, 0xff}}, + }, + }, + 10: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Good, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + Color{'E', color.RGBA{0xfb, 0x9a, 0x99, 0xff}}, + Color{'F', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xbf, 0x6f, 0xff}}, + Color{'H', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + Color{'I', color.RGBA{0xca, 0xb2, 0xd6, 0xff}}, + Color{'J', color.RGBA{0x6a, 0x3d, 0x9a, 0xff}}, + }, + }, + 11: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + Color{'E', color.RGBA{0xfb, 0x9a, 0x99, 0xff}}, + Color{'F', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xbf, 0x6f, 0xff}}, + Color{'H', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + Color{'I', color.RGBA{0xca, 0xb2, 0xd6, 0xff}}, + Color{'J', color.RGBA{0x6a, 0x3d, 0x9a, 0xff}}, + Color{'K', color.RGBA{0xff, 0xff, 0x99, 0xff}}, + }, + }, + 12: NonDivergingPalette{ + ID: "Paired", + Name: "Paired", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0xa6, 0xce, 0xe3, 0xff}}, + Color{'B', color.RGBA{0x1f, 0x78, 0xb4, 0xff}}, + Color{'C', color.RGBA{0xb2, 0xdf, 0x8a, 0xff}}, + Color{'D', color.RGBA{0x33, 0xa0, 0x2c, 0xff}}, + Color{'E', color.RGBA{0xfb, 0x9a, 0x99, 0xff}}, + Color{'F', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0xbf, 0x6f, 0xff}}, + Color{'H', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + Color{'I', color.RGBA{0xca, 0xb2, 0xd6, 0xff}}, + Color{'J', color.RGBA{0x6a, 0x3d, 0x9a, 0xff}}, + Color{'K', color.RGBA{0xff, 0xff, 0x99, 0xff}}, + Color{'L', color.RGBA{0xb1, 0x59, 0x28, 0xff}}, + }, + }, + } + Pastel1 = Qualitative{ + 3: NonDivergingPalette{ + ID: "Pastel1", + Name: "Pastel 1", + Laptop: Unsure, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xfb, 0xb4, 0xae, 0xff}}, + Color{'B', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'C', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Pastel1", + Name: "Pastel 1", + Laptop: Unsure, + CRT: Good, + ColorBlind: Bad, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xfb, 0xb4, 0xae, 0xff}}, + Color{'B', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'C', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'D', color.RGBA{0xde, 0xcb, 0xe4, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Pastel1", + Name: "Pastel 1", + Laptop: Unsure, + CRT: Good, + ColorBlind: Bad, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xfb, 0xb4, 0xae, 0xff}}, + Color{'B', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'C', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'D', color.RGBA{0xde, 0xcb, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xd9, 0xa6, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Pastel1", + Name: "Pastel 1", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0xfb, 0xb4, 0xae, 0xff}}, + Color{'B', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'C', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'D', color.RGBA{0xde, 0xcb, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xd9, 0xa6, 0xff}}, + Color{'F', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Pastel1", + Name: "Pastel 1", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xfb, 0xb4, 0xae, 0xff}}, + Color{'B', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'C', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'D', color.RGBA{0xde, 0xcb, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xd9, 0xa6, 0xff}}, + Color{'F', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'G', color.RGBA{0xe5, 0xd8, 0xbd, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Pastel1", + Name: "Pastel 1", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xfb, 0xb4, 0xae, 0xff}}, + Color{'B', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'C', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'D', color.RGBA{0xde, 0xcb, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xd9, 0xa6, 0xff}}, + Color{'F', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'G', color.RGBA{0xe5, 0xd8, 0xbd, 0xff}}, + Color{'H', color.RGBA{0xfd, 0xda, 0xec, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Pastel1", + Name: "Pastel 1", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xfb, 0xb4, 0xae, 0xff}}, + Color{'B', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'C', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'D', color.RGBA{0xde, 0xcb, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xd9, 0xa6, 0xff}}, + Color{'F', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'G', color.RGBA{0xe5, 0xd8, 0xbd, 0xff}}, + Color{'H', color.RGBA{0xfd, 0xda, 0xec, 0xff}}, + Color{'I', color.RGBA{0xf2, 0xf2, 0xf2, 0xff}}, + }, + }, + } + Pastel2 = Qualitative{ + 3: NonDivergingPalette{ + ID: "Pastel2", + Name: "Pastel 2", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Unsure, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0xb3, 0xe2, 0xcd, 0xff}}, + Color{'B', color.RGBA{0xfd, 0xcd, 0xac, 0xff}}, + Color{'C', color.RGBA{0xcb, 0xd5, 0xe8, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Pastel2", + Name: "Pastel 2", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0xb3, 0xe2, 0xcd, 0xff}}, + Color{'B', color.RGBA{0xfd, 0xcd, 0xac, 0xff}}, + Color{'C', color.RGBA{0xcb, 0xd5, 0xe8, 0xff}}, + Color{'D', color.RGBA{0xf4, 0xca, 0xe4, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Pastel2", + Name: "Pastel 2", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xb3, 0xe2, 0xcd, 0xff}}, + Color{'B', color.RGBA{0xfd, 0xcd, 0xac, 0xff}}, + Color{'C', color.RGBA{0xcb, 0xd5, 0xe8, 0xff}}, + Color{'D', color.RGBA{0xf4, 0xca, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xe6, 0xf5, 0xc9, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Pastel2", + Name: "Pastel 2", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xb3, 0xe2, 0xcd, 0xff}}, + Color{'B', color.RGBA{0xfd, 0xcd, 0xac, 0xff}}, + Color{'C', color.RGBA{0xcb, 0xd5, 0xe8, 0xff}}, + Color{'D', color.RGBA{0xf4, 0xca, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xe6, 0xf5, 0xc9, 0xff}}, + Color{'F', color.RGBA{0xff, 0xf2, 0xae, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Pastel2", + Name: "Pastel 2", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xb3, 0xe2, 0xcd, 0xff}}, + Color{'B', color.RGBA{0xfd, 0xcd, 0xac, 0xff}}, + Color{'C', color.RGBA{0xcb, 0xd5, 0xe8, 0xff}}, + Color{'D', color.RGBA{0xf4, 0xca, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xe6, 0xf5, 0xc9, 0xff}}, + Color{'F', color.RGBA{0xff, 0xf2, 0xae, 0xff}}, + Color{'G', color.RGBA{0xf1, 0xe2, 0xcc, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Pastel2", + Name: "Pastel 2", + Laptop: Bad, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xb3, 0xe2, 0xcd, 0xff}}, + Color{'B', color.RGBA{0xfd, 0xcd, 0xac, 0xff}}, + Color{'C', color.RGBA{0xcb, 0xd5, 0xe8, 0xff}}, + Color{'D', color.RGBA{0xf4, 0xca, 0xe4, 0xff}}, + Color{'E', color.RGBA{0xe6, 0xf5, 0xc9, 0xff}}, + Color{'F', color.RGBA{0xff, 0xf2, 0xae, 0xff}}, + Color{'G', color.RGBA{0xf1, 0xe2, 0xcc, 0xff}}, + Color{'H', color.RGBA{0xcc, 0xcc, 0xcc, 0xff}}, + }, + }, + } + Set1 = Qualitative{ + 3: NonDivergingPalette{ + ID: "Set1", + Name: "Set 1", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xe4, 0x1a, 0x1c, 0xff}}, + Color{'B', color.RGBA{0x37, 0x7e, 0xb8, 0xff}}, + Color{'C', color.RGBA{0x4d, 0xaf, 0x4a, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Set1", + Name: "Set 1", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xe4, 0x1a, 0x1c, 0xff}}, + Color{'B', color.RGBA{0x37, 0x7e, 0xb8, 0xff}}, + Color{'C', color.RGBA{0x4d, 0xaf, 0x4a, 0xff}}, + Color{'D', color.RGBA{0x98, 0x4e, 0xa3, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Set1", + Name: "Set 1", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xe4, 0x1a, 0x1c, 0xff}}, + Color{'B', color.RGBA{0x37, 0x7e, 0xb8, 0xff}}, + Color{'C', color.RGBA{0x4d, 0xaf, 0x4a, 0xff}}, + Color{'D', color.RGBA{0x98, 0x4e, 0xa3, 0xff}}, + Color{'E', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Set1", + Name: "Set 1", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xe4, 0x1a, 0x1c, 0xff}}, + Color{'B', color.RGBA{0x37, 0x7e, 0xb8, 0xff}}, + Color{'C', color.RGBA{0x4d, 0xaf, 0x4a, 0xff}}, + Color{'D', color.RGBA{0x98, 0x4e, 0xa3, 0xff}}, + Color{'E', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + Color{'F', color.RGBA{0xff, 0xff, 0x33, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Set1", + Name: "Set 1", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xe4, 0x1a, 0x1c, 0xff}}, + Color{'B', color.RGBA{0x37, 0x7e, 0xb8, 0xff}}, + Color{'C', color.RGBA{0x4d, 0xaf, 0x4a, 0xff}}, + Color{'D', color.RGBA{0x98, 0x4e, 0xa3, 0xff}}, + Color{'E', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + Color{'F', color.RGBA{0xff, 0xff, 0x33, 0xff}}, + Color{'G', color.RGBA{0xa6, 0x56, 0x28, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Set1", + Name: "Set 1", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xe4, 0x1a, 0x1c, 0xff}}, + Color{'B', color.RGBA{0x37, 0x7e, 0xb8, 0xff}}, + Color{'C', color.RGBA{0x4d, 0xaf, 0x4a, 0xff}}, + Color{'D', color.RGBA{0x98, 0x4e, 0xa3, 0xff}}, + Color{'E', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + Color{'F', color.RGBA{0xff, 0xff, 0x33, 0xff}}, + Color{'G', color.RGBA{0xa6, 0x56, 0x28, 0xff}}, + Color{'H', color.RGBA{0xf7, 0x81, 0xbf, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Set1", + Name: "Set 1", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0xe4, 0x1a, 0x1c, 0xff}}, + Color{'B', color.RGBA{0x37, 0x7e, 0xb8, 0xff}}, + Color{'C', color.RGBA{0x4d, 0xaf, 0x4a, 0xff}}, + Color{'D', color.RGBA{0x98, 0x4e, 0xa3, 0xff}}, + Color{'E', color.RGBA{0xff, 0x7f, 0x00, 0xff}}, + Color{'F', color.RGBA{0xff, 0xff, 0x33, 0xff}}, + Color{'G', color.RGBA{0xa6, 0x56, 0x28, 0xff}}, + Color{'H', color.RGBA{0xf7, 0x81, 0xbf, 0xff}}, + Color{'I', color.RGBA{0x99, 0x99, 0x99, 0xff}}, + }, + }, + } + Set2 = Qualitative{ + 3: NonDivergingPalette{ + ID: "Set2", + Name: "Set 2", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'B', color.RGBA{0xfc, 0x8d, 0x62, 0xff}}, + Color{'C', color.RGBA{0x8d, 0xa0, 0xcb, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Set2", + Name: "Set 2", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'B', color.RGBA{0xfc, 0x8d, 0x62, 0xff}}, + Color{'C', color.RGBA{0x8d, 0xa0, 0xcb, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x8a, 0xc3, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Set2", + Name: "Set 2", + Laptop: Unsure, + CRT: Good, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'B', color.RGBA{0xfc, 0x8d, 0x62, 0xff}}, + Color{'C', color.RGBA{0x8d, 0xa0, 0xcb, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x8a, 0xc3, 0xff}}, + Color{'E', color.RGBA{0xa6, 0xd8, 0x54, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Set2", + Name: "Set 2", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Unsure, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'B', color.RGBA{0xfc, 0x8d, 0x62, 0xff}}, + Color{'C', color.RGBA{0x8d, 0xa0, 0xcb, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x8a, 0xc3, 0xff}}, + Color{'E', color.RGBA{0xa6, 0xd8, 0x54, 0xff}}, + Color{'F', color.RGBA{0xff, 0xd9, 0x2f, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Set2", + Name: "Set 2", + Laptop: Unsure, + CRT: Bad, + ColorBlind: Bad, + Copy: Bad, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'B', color.RGBA{0xfc, 0x8d, 0x62, 0xff}}, + Color{'C', color.RGBA{0x8d, 0xa0, 0xcb, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x8a, 0xc3, 0xff}}, + Color{'E', color.RGBA{0xa6, 0xd8, 0x54, 0xff}}, + Color{'F', color.RGBA{0xff, 0xd9, 0x2f, 0xff}}, + Color{'G', color.RGBA{0xe5, 0xc4, 0x94, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Set2", + Name: "Set 2", + Laptop: Unsure, + CRT: Bad, + ColorBlind: Bad, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x66, 0xc2, 0xa5, 0xff}}, + Color{'B', color.RGBA{0xfc, 0x8d, 0x62, 0xff}}, + Color{'C', color.RGBA{0x8d, 0xa0, 0xcb, 0xff}}, + Color{'D', color.RGBA{0xe7, 0x8a, 0xc3, 0xff}}, + Color{'E', color.RGBA{0xa6, 0xd8, 0x54, 0xff}}, + Color{'F', color.RGBA{0xff, 0xd9, 0x2f, 0xff}}, + Color{'G', color.RGBA{0xe5, 0xc4, 0x94, 0xff}}, + Color{'H', color.RGBA{0xb3, 0xb3, 0xb3, 0xff}}, + }, + }, + } + Set3 = Qualitative{ + 3: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Good, + CRT: Good, + ColorBlind: Unsure, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Good, + CRT: Good, + ColorBlind: Bad, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + Color{'E', color.RGBA{0x80, 0xb1, 0xd3, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Unsure, + CRT: Good, + ColorBlind: Bad, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + Color{'E', color.RGBA{0x80, 0xb1, 0xd3, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb4, 0x62, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Unsure, + CRT: Good, + ColorBlind: Bad, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + Color{'E', color.RGBA{0x80, 0xb1, 0xd3, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb4, 0x62, 0xff}}, + Color{'G', color.RGBA{0xb3, 0xde, 0x69, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Unsure, + CRT: Good, + ColorBlind: Bad, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + Color{'E', color.RGBA{0x80, 0xb1, 0xd3, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb4, 0x62, 0xff}}, + Color{'G', color.RGBA{0xb3, 0xde, 0x69, 0xff}}, + Color{'H', color.RGBA{0xfc, 0xcd, 0xe5, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + Color{'E', color.RGBA{0x80, 0xb1, 0xd3, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb4, 0x62, 0xff}}, + Color{'G', color.RGBA{0xb3, 0xde, 0x69, 0xff}}, + Color{'H', color.RGBA{0xfc, 0xcd, 0xe5, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xd9, 0xd9, 0xff}}, + }, + }, + 10: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + Color{'E', color.RGBA{0x80, 0xb1, 0xd3, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb4, 0x62, 0xff}}, + Color{'G', color.RGBA{0xb3, 0xde, 0x69, 0xff}}, + Color{'H', color.RGBA{0xfc, 0xcd, 0xe5, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xd9, 0xd9, 0xff}}, + Color{'J', color.RGBA{0xbc, 0x80, 0xbd, 0xff}}, + }, + }, + 11: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + Color{'E', color.RGBA{0x80, 0xb1, 0xd3, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb4, 0x62, 0xff}}, + Color{'G', color.RGBA{0xb3, 0xde, 0x69, 0xff}}, + Color{'H', color.RGBA{0xfc, 0xcd, 0xe5, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xd9, 0xd9, 0xff}}, + Color{'J', color.RGBA{0xbc, 0x80, 0xbd, 0xff}}, + Color{'K', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + }, + }, + 12: NonDivergingPalette{ + ID: "Set3", + Name: "Set 3", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Bad, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0x8d, 0xd3, 0xc7, 0xff}}, + Color{'B', color.RGBA{0xff, 0xff, 0xb3, 0xff}}, + Color{'C', color.RGBA{0xbe, 0xba, 0xda, 0xff}}, + Color{'D', color.RGBA{0xfb, 0x80, 0x72, 0xff}}, + Color{'E', color.RGBA{0x80, 0xb1, 0xd3, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xb4, 0x62, 0xff}}, + Color{'G', color.RGBA{0xb3, 0xde, 0x69, 0xff}}, + Color{'H', color.RGBA{0xfc, 0xcd, 0xe5, 0xff}}, + Color{'I', color.RGBA{0xd9, 0xd9, 0xd9, 0xff}}, + Color{'J', color.RGBA{0xbc, 0x80, 0xbd, 0xff}}, + Color{'K', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'L', color.RGBA{0xff, 0xed, 0x6f, 0xff}}, + }, + }, + } +) +var ( + Blues = Sequential{ + 3: NonDivergingPalette{ + ID: "Blues", + Name: "Blues", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xde, 0xeb, 0xf7, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xca, 0xe1, 0xff}}, + Color{'I', color.RGBA{0x31, 0x82, 0xbd, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Blues", + Name: "Blues", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xef, 0xf3, 0xff, 0xff}}, + Color{'E', color.RGBA{0xbd, 0xd7, 0xe7, 0xff}}, + Color{'G', color.RGBA{0x6b, 0xae, 0xd6, 0xff}}, + Color{'J', color.RGBA{0x21, 0x71, 0xb5, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Blues", + Name: "Blues", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xef, 0xf3, 0xff, 0xff}}, + Color{'E', color.RGBA{0xbd, 0xd7, 0xe7, 0xff}}, + Color{'G', color.RGBA{0x6b, 0xae, 0xd6, 0xff}}, + Color{'I', color.RGBA{0x31, 0x82, 0xbd, 0xff}}, + Color{'K', color.RGBA{0x08, 0x51, 0x9c, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Blues", + Name: "Blues", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xef, 0xf3, 0xff, 0xff}}, + Color{'D', color.RGBA{0xc6, 0xdb, 0xef, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xca, 0xe1, 0xff}}, + Color{'G', color.RGBA{0x6b, 0xae, 0xd6, 0xff}}, + Color{'I', color.RGBA{0x31, 0x82, 0xbd, 0xff}}, + Color{'K', color.RGBA{0x08, 0x51, 0x9c, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Blues", + Name: "Blues", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xef, 0xf3, 0xff, 0xff}}, + Color{'D', color.RGBA{0xc6, 0xdb, 0xef, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xca, 0xe1, 0xff}}, + Color{'G', color.RGBA{0x6b, 0xae, 0xd6, 0xff}}, + Color{'H', color.RGBA{0x42, 0x92, 0xc6, 0xff}}, + Color{'J', color.RGBA{0x21, 0x71, 0xb5, 0xff}}, + Color{'L', color.RGBA{0x08, 0x45, 0x94, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Blues", + Name: "Blues", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfb, 0xff, 0xff}}, + Color{'C', color.RGBA{0xde, 0xeb, 0xf7, 0xff}}, + Color{'D', color.RGBA{0xc6, 0xdb, 0xef, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xca, 0xe1, 0xff}}, + Color{'G', color.RGBA{0x6b, 0xae, 0xd6, 0xff}}, + Color{'H', color.RGBA{0x42, 0x92, 0xc6, 0xff}}, + Color{'J', color.RGBA{0x21, 0x71, 0xb5, 0xff}}, + Color{'L', color.RGBA{0x08, 0x45, 0x94, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Blues", + Name: "Blues", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfb, 0xff, 0xff}}, + Color{'C', color.RGBA{0xde, 0xeb, 0xf7, 0xff}}, + Color{'D', color.RGBA{0xc6, 0xdb, 0xef, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xca, 0xe1, 0xff}}, + Color{'G', color.RGBA{0x6b, 0xae, 0xd6, 0xff}}, + Color{'H', color.RGBA{0x42, 0x92, 0xc6, 0xff}}, + Color{'J', color.RGBA{0x21, 0x71, 0xb5, 0xff}}, + Color{'K', color.RGBA{0x08, 0x51, 0x9c, 0xff}}, + Color{'M', color.RGBA{0x08, 0x30, 0x6b, 0xff}}, + }, + }, + } + BuGn = Sequential{ + 3: NonDivergingPalette{ + ID: "BuGn", + Name: "Blue-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xe5, 0xf5, 0xf9, 0xff}}, + Color{'F', color.RGBA{0x99, 0xd8, 0xc9, 0xff}}, + Color{'I', color.RGBA{0x2c, 0xa2, 0x5f, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "BuGn", + Name: "Blue-Green", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xfb, 0xff}}, + Color{'E', color.RGBA{0xb2, 0xe2, 0xe2, 0xff}}, + Color{'G', color.RGBA{0x66, 0xc2, 0xa4, 0xff}}, + Color{'J', color.RGBA{0x23, 0x8b, 0x45, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "BuGn", + Name: "Blue-Green", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xfb, 0xff}}, + Color{'E', color.RGBA{0xb2, 0xe2, 0xe2, 0xff}}, + Color{'G', color.RGBA{0x66, 0xc2, 0xa4, 0xff}}, + Color{'I', color.RGBA{0x2c, 0xa2, 0x5f, 0xff}}, + Color{'K', color.RGBA{0x00, 0x6d, 0x2c, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "BuGn", + Name: "Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xfb, 0xff}}, + Color{'D', color.RGBA{0xcc, 0xec, 0xe6, 0xff}}, + Color{'F', color.RGBA{0x99, 0xd8, 0xc9, 0xff}}, + Color{'G', color.RGBA{0x66, 0xc2, 0xa4, 0xff}}, + Color{'I', color.RGBA{0x2c, 0xa2, 0x5f, 0xff}}, + Color{'K', color.RGBA{0x00, 0x6d, 0x2c, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "BuGn", + Name: "Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xfb, 0xff}}, + Color{'D', color.RGBA{0xcc, 0xec, 0xe6, 0xff}}, + Color{'F', color.RGBA{0x99, 0xd8, 0xc9, 0xff}}, + Color{'G', color.RGBA{0x66, 0xc2, 0xa4, 0xff}}, + Color{'H', color.RGBA{0x41, 0xae, 0x76, 0xff}}, + Color{'J', color.RGBA{0x23, 0x8b, 0x45, 0xff}}, + Color{'L', color.RGBA{0x00, 0x58, 0x24, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "BuGn", + Name: "Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfc, 0xfd, 0xff}}, + Color{'C', color.RGBA{0xe5, 0xf5, 0xf9, 0xff}}, + Color{'D', color.RGBA{0xcc, 0xec, 0xe6, 0xff}}, + Color{'F', color.RGBA{0x99, 0xd8, 0xc9, 0xff}}, + Color{'G', color.RGBA{0x66, 0xc2, 0xa4, 0xff}}, + Color{'H', color.RGBA{0x41, 0xae, 0x76, 0xff}}, + Color{'J', color.RGBA{0x23, 0x8b, 0x45, 0xff}}, + Color{'L', color.RGBA{0x00, 0x58, 0x24, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "BuGn", + Name: "Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfc, 0xfd, 0xff}}, + Color{'C', color.RGBA{0xe5, 0xf5, 0xf9, 0xff}}, + Color{'D', color.RGBA{0xcc, 0xec, 0xe6, 0xff}}, + Color{'F', color.RGBA{0x99, 0xd8, 0xc9, 0xff}}, + Color{'G', color.RGBA{0x66, 0xc2, 0xa4, 0xff}}, + Color{'H', color.RGBA{0x41, 0xae, 0x76, 0xff}}, + Color{'J', color.RGBA{0x23, 0x8b, 0x45, 0xff}}, + Color{'K', color.RGBA{0x00, 0x6d, 0x2c, 0xff}}, + Color{'M', color.RGBA{0x00, 0x44, 0x1b, 0xff}}, + }, + }, + } + BuPu = Sequential{ + 3: NonDivergingPalette{ + ID: "BuPu", + Name: "Blue-Purple", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xe0, 0xec, 0xf4, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xbc, 0xda, 0xff}}, + Color{'I', color.RGBA{0x88, 0x56, 0xa7, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "BuPu", + Name: "Blue-Purple", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xfb, 0xff}}, + Color{'E', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'G', color.RGBA{0x8c, 0x96, 0xc6, 0xff}}, + Color{'J', color.RGBA{0x88, 0x41, 0x9d, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "BuPu", + Name: "Blue-Purple", + Laptop: Good, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xfb, 0xff}}, + Color{'E', color.RGBA{0xb3, 0xcd, 0xe3, 0xff}}, + Color{'G', color.RGBA{0x8c, 0x96, 0xc6, 0xff}}, + Color{'I', color.RGBA{0x88, 0x56, 0xa7, 0xff}}, + Color{'K', color.RGBA{0x81, 0x0f, 0x7c, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "BuPu", + Name: "Blue-Purple", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xfb, 0xff}}, + Color{'D', color.RGBA{0xbf, 0xd3, 0xe6, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xbc, 0xda, 0xff}}, + Color{'G', color.RGBA{0x8c, 0x96, 0xc6, 0xff}}, + Color{'I', color.RGBA{0x88, 0x56, 0xa7, 0xff}}, + Color{'K', color.RGBA{0x81, 0x0f, 0x7c, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "BuPu", + Name: "Blue-Purple", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xfb, 0xff}}, + Color{'D', color.RGBA{0xbf, 0xd3, 0xe6, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xbc, 0xda, 0xff}}, + Color{'G', color.RGBA{0x8c, 0x96, 0xc6, 0xff}}, + Color{'H', color.RGBA{0x8c, 0x6b, 0xb1, 0xff}}, + Color{'J', color.RGBA{0x88, 0x41, 0x9d, 0xff}}, + Color{'L', color.RGBA{0x6e, 0x01, 0x6b, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "BuPu", + Name: "Blue-Purple", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfc, 0xfd, 0xff}}, + Color{'C', color.RGBA{0xe0, 0xec, 0xf4, 0xff}}, + Color{'D', color.RGBA{0xbf, 0xd3, 0xe6, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xbc, 0xda, 0xff}}, + Color{'G', color.RGBA{0x8c, 0x96, 0xc6, 0xff}}, + Color{'H', color.RGBA{0x8c, 0x6b, 0xb1, 0xff}}, + Color{'J', color.RGBA{0x88, 0x41, 0x9d, 0xff}}, + Color{'L', color.RGBA{0x6e, 0x01, 0x6b, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "BuPu", + Name: "Blue-Purple", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfc, 0xfd, 0xff}}, + Color{'C', color.RGBA{0xe0, 0xec, 0xf4, 0xff}}, + Color{'D', color.RGBA{0xbf, 0xd3, 0xe6, 0xff}}, + Color{'F', color.RGBA{0x9e, 0xbc, 0xda, 0xff}}, + Color{'G', color.RGBA{0x8c, 0x96, 0xc6, 0xff}}, + Color{'H', color.RGBA{0x8c, 0x6b, 0xb1, 0xff}}, + Color{'J', color.RGBA{0x88, 0x41, 0x9d, 0xff}}, + Color{'K', color.RGBA{0x81, 0x0f, 0x7c, 0xff}}, + Color{'M', color.RGBA{0x4d, 0x00, 0x4b, 0xff}}, + }, + }, + } + GnBu = Sequential{ + 3: NonDivergingPalette{ + ID: "GnBu", + Name: "Green-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xe0, 0xf3, 0xdb, 0xff}}, + Color{'F', color.RGBA{0xa8, 0xdd, 0xb5, 0xff}}, + Color{'I', color.RGBA{0x43, 0xa2, 0xca, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "GnBu", + Name: "Green-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xf0, 0xf9, 0xe8, 0xff}}, + Color{'E', color.RGBA{0xba, 0xe4, 0xbc, 0xff}}, + Color{'G', color.RGBA{0x7b, 0xcc, 0xc4, 0xff}}, + Color{'J', color.RGBA{0x2b, 0x8c, 0xbe, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "GnBu", + Name: "Green-Blue", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf0, 0xf9, 0xe8, 0xff}}, + Color{'E', color.RGBA{0xba, 0xe4, 0xbc, 0xff}}, + Color{'G', color.RGBA{0x7b, 0xcc, 0xc4, 0xff}}, + Color{'I', color.RGBA{0x43, 0xa2, 0xca, 0xff}}, + Color{'K', color.RGBA{0x08, 0x68, 0xac, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "GnBu", + Name: "Green-Blue", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf0, 0xf9, 0xe8, 0xff}}, + Color{'D', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'F', color.RGBA{0xa8, 0xdd, 0xb5, 0xff}}, + Color{'G', color.RGBA{0x7b, 0xcc, 0xc4, 0xff}}, + Color{'I', color.RGBA{0x43, 0xa2, 0xca, 0xff}}, + Color{'K', color.RGBA{0x08, 0x68, 0xac, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "GnBu", + Name: "Green-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf0, 0xf9, 0xe8, 0xff}}, + Color{'D', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'F', color.RGBA{0xa8, 0xdd, 0xb5, 0xff}}, + Color{'G', color.RGBA{0x7b, 0xcc, 0xc4, 0xff}}, + Color{'H', color.RGBA{0x4e, 0xb3, 0xd3, 0xff}}, + Color{'J', color.RGBA{0x2b, 0x8c, 0xbe, 0xff}}, + Color{'L', color.RGBA{0x08, 0x58, 0x9e, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "GnBu", + Name: "Green-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfc, 0xf0, 0xff}}, + Color{'C', color.RGBA{0xe0, 0xf3, 0xdb, 0xff}}, + Color{'D', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'F', color.RGBA{0xa8, 0xdd, 0xb5, 0xff}}, + Color{'G', color.RGBA{0x7b, 0xcc, 0xc4, 0xff}}, + Color{'H', color.RGBA{0x4e, 0xb3, 0xd3, 0xff}}, + Color{'J', color.RGBA{0x2b, 0x8c, 0xbe, 0xff}}, + Color{'L', color.RGBA{0x08, 0x58, 0x9e, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "GnBu", + Name: "Green-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfc, 0xf0, 0xff}}, + Color{'C', color.RGBA{0xe0, 0xf3, 0xdb, 0xff}}, + Color{'D', color.RGBA{0xcc, 0xeb, 0xc5, 0xff}}, + Color{'F', color.RGBA{0xa8, 0xdd, 0xb5, 0xff}}, + Color{'G', color.RGBA{0x7b, 0xcc, 0xc4, 0xff}}, + Color{'H', color.RGBA{0x4e, 0xb3, 0xd3, 0xff}}, + Color{'J', color.RGBA{0x2b, 0x8c, 0xbe, 0xff}}, + Color{'K', color.RGBA{0x08, 0x68, 0xac, 0xff}}, + Color{'M', color.RGBA{0x08, 0x40, 0x81, 0xff}}, + }, + }, + } + Greens = Sequential{ + 3: NonDivergingPalette{ + ID: "Greens", + Name: "Greens", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xe5, 0xf5, 0xe0, 0xff}}, + Color{'F', color.RGBA{0xa1, 0xd9, 0x9b, 0xff}}, + Color{'I', color.RGBA{0x31, 0xa3, 0x54, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Greens", + Name: "Greens", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xe9, 0xff}}, + Color{'E', color.RGBA{0xba, 0xe4, 0xb3, 0xff}}, + Color{'G', color.RGBA{0x74, 0xc4, 0x76, 0xff}}, + Color{'J', color.RGBA{0x23, 0x8b, 0x45, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Greens", + Name: "Greens", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xe9, 0xff}}, + Color{'E', color.RGBA{0xba, 0xe4, 0xb3, 0xff}}, + Color{'G', color.RGBA{0x74, 0xc4, 0x76, 0xff}}, + Color{'I', color.RGBA{0x31, 0xa3, 0x54, 0xff}}, + Color{'K', color.RGBA{0x00, 0x6d, 0x2c, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Greens", + Name: "Greens", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xe9, 0xff}}, + Color{'D', color.RGBA{0xc7, 0xe9, 0xc0, 0xff}}, + Color{'F', color.RGBA{0xa1, 0xd9, 0x9b, 0xff}}, + Color{'G', color.RGBA{0x74, 0xc4, 0x76, 0xff}}, + Color{'I', color.RGBA{0x31, 0xa3, 0x54, 0xff}}, + Color{'K', color.RGBA{0x00, 0x6d, 0x2c, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Greens", + Name: "Greens", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xed, 0xf8, 0xe9, 0xff}}, + Color{'D', color.RGBA{0xc7, 0xe9, 0xc0, 0xff}}, + Color{'F', color.RGBA{0xa1, 0xd9, 0x9b, 0xff}}, + Color{'G', color.RGBA{0x74, 0xc4, 0x76, 0xff}}, + Color{'H', color.RGBA{0x41, 0xab, 0x5d, 0xff}}, + Color{'J', color.RGBA{0x23, 0x8b, 0x45, 0xff}}, + Color{'L', color.RGBA{0x00, 0x5a, 0x32, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Greens", + Name: "Greens", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfc, 0xf5, 0xff}}, + Color{'C', color.RGBA{0xe5, 0xf5, 0xe0, 0xff}}, + Color{'D', color.RGBA{0xc7, 0xe9, 0xc0, 0xff}}, + Color{'F', color.RGBA{0xa1, 0xd9, 0x9b, 0xff}}, + Color{'G', color.RGBA{0x74, 0xc4, 0x76, 0xff}}, + Color{'H', color.RGBA{0x41, 0xab, 0x5d, 0xff}}, + Color{'J', color.RGBA{0x23, 0x8b, 0x45, 0xff}}, + Color{'L', color.RGBA{0x00, 0x5a, 0x32, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Greens", + Name: "Greens", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xfc, 0xf5, 0xff}}, + Color{'C', color.RGBA{0xe5, 0xf5, 0xe0, 0xff}}, + Color{'D', color.RGBA{0xc7, 0xe9, 0xc0, 0xff}}, + Color{'F', color.RGBA{0xa1, 0xd9, 0x9b, 0xff}}, + Color{'G', color.RGBA{0x74, 0xc4, 0x76, 0xff}}, + Color{'H', color.RGBA{0x41, 0xab, 0x5d, 0xff}}, + Color{'J', color.RGBA{0x23, 0x8b, 0x45, 0xff}}, + Color{'K', color.RGBA{0x00, 0x6d, 0x2c, 0xff}}, + Color{'M', color.RGBA{0x00, 0x44, 0x1b, 0xff}}, + }, + }, + } + Greys = Sequential{ + 3: NonDivergingPalette{ + ID: "Greys", + Name: "Greys", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xf0, 0xf0, 0xf0, 0xff}}, + Color{'F', color.RGBA{0xbd, 0xbd, 0xbd, 0xff}}, + Color{'I', color.RGBA{0x63, 0x63, 0x63, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Greys", + Name: "Greys", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'E', color.RGBA{0xcc, 0xcc, 0xcc, 0xff}}, + Color{'G', color.RGBA{0x96, 0x96, 0x96, 0xff}}, + Color{'J', color.RGBA{0x52, 0x52, 0x52, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Greys", + Name: "Greys", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'E', color.RGBA{0xcc, 0xcc, 0xcc, 0xff}}, + Color{'G', color.RGBA{0x96, 0x96, 0x96, 0xff}}, + Color{'I', color.RGBA{0x63, 0x63, 0x63, 0xff}}, + Color{'K', color.RGBA{0x25, 0x25, 0x25, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Greys", + Name: "Greys", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'D', color.RGBA{0xd9, 0xd9, 0xd9, 0xff}}, + Color{'F', color.RGBA{0xbd, 0xbd, 0xbd, 0xff}}, + Color{'G', color.RGBA{0x96, 0x96, 0x96, 0xff}}, + Color{'I', color.RGBA{0x63, 0x63, 0x63, 0xff}}, + Color{'K', color.RGBA{0x25, 0x25, 0x25, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Greys", + Name: "Greys", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf7, 0xf7, 0xf7, 0xff}}, + Color{'D', color.RGBA{0xd9, 0xd9, 0xd9, 0xff}}, + Color{'F', color.RGBA{0xbd, 0xbd, 0xbd, 0xff}}, + Color{'G', color.RGBA{0x96, 0x96, 0x96, 0xff}}, + Color{'H', color.RGBA{0x73, 0x73, 0x73, 0xff}}, + Color{'J', color.RGBA{0x52, 0x52, 0x52, 0xff}}, + Color{'L', color.RGBA{0x25, 0x25, 0x25, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Greys", + Name: "Greys", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xff, 0xff}}, + Color{'C', color.RGBA{0xf0, 0xf0, 0xf0, 0xff}}, + Color{'D', color.RGBA{0xd9, 0xd9, 0xd9, 0xff}}, + Color{'F', color.RGBA{0xbd, 0xbd, 0xbd, 0xff}}, + Color{'G', color.RGBA{0x96, 0x96, 0x96, 0xff}}, + Color{'H', color.RGBA{0x73, 0x73, 0x73, 0xff}}, + Color{'J', color.RGBA{0x52, 0x52, 0x52, 0xff}}, + Color{'L', color.RGBA{0x25, 0x25, 0x25, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Greys", + Name: "Greys", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xff, 0xff}}, + Color{'C', color.RGBA{0xf0, 0xf0, 0xf0, 0xff}}, + Color{'D', color.RGBA{0xd9, 0xd9, 0xd9, 0xff}}, + Color{'F', color.RGBA{0xbd, 0xbd, 0xbd, 0xff}}, + Color{'G', color.RGBA{0x96, 0x96, 0x96, 0xff}}, + Color{'H', color.RGBA{0x73, 0x73, 0x73, 0xff}}, + Color{'J', color.RGBA{0x52, 0x52, 0x52, 0xff}}, + Color{'K', color.RGBA{0x25, 0x25, 0x25, 0xff}}, + Color{'M', color.RGBA{0x00, 0x00, 0x00, 0xff}}, + }, + }, + } + Oranges = Sequential{ + 3: NonDivergingPalette{ + ID: "Oranges", + Name: "Oranges", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xfe, 0xe6, 0xce, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x6b, 0xff}}, + Color{'I', color.RGBA{0xe6, 0x55, 0x0d, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Oranges", + Name: "Oranges", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xed, 0xde, 0xff}}, + Color{'E', color.RGBA{0xfd, 0xbe, 0x85, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'J', color.RGBA{0xd9, 0x47, 0x01, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Oranges", + Name: "Oranges", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xed, 0xde, 0xff}}, + Color{'E', color.RGBA{0xfd, 0xbe, 0x85, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'I', color.RGBA{0xe6, 0x55, 0x0d, 0xff}}, + Color{'K', color.RGBA{0xa6, 0x36, 0x03, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Oranges", + Name: "Oranges", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xed, 0xde, 0xff}}, + Color{'D', color.RGBA{0xfd, 0xd0, 0xa2, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x6b, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'I', color.RGBA{0xe6, 0x55, 0x0d, 0xff}}, + Color{'K', color.RGBA{0xa6, 0x36, 0x03, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Oranges", + Name: "Oranges", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xed, 0xde, 0xff}}, + Color{'D', color.RGBA{0xfd, 0xd0, 0xa2, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x6b, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'H', color.RGBA{0xf1, 0x69, 0x13, 0xff}}, + Color{'J', color.RGBA{0xd9, 0x48, 0x01, 0xff}}, + Color{'L', color.RGBA{0x8c, 0x2d, 0x04, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Oranges", + Name: "Oranges", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf5, 0xeb, 0xff}}, + Color{'C', color.RGBA{0xfe, 0xe6, 0xce, 0xff}}, + Color{'D', color.RGBA{0xfd, 0xd0, 0xa2, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x6b, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'H', color.RGBA{0xf1, 0x69, 0x13, 0xff}}, + Color{'J', color.RGBA{0xd9, 0x48, 0x01, 0xff}}, + Color{'L', color.RGBA{0x8c, 0x2d, 0x04, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Oranges", + Name: "Oranges", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf5, 0xeb, 0xff}}, + Color{'C', color.RGBA{0xfe, 0xe6, 0xce, 0xff}}, + Color{'D', color.RGBA{0xfd, 0xd0, 0xa2, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xae, 0x6b, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'H', color.RGBA{0xf1, 0x69, 0x13, 0xff}}, + Color{'J', color.RGBA{0xd9, 0x48, 0x01, 0xff}}, + Color{'K', color.RGBA{0xa6, 0x36, 0x03, 0xff}}, + Color{'M', color.RGBA{0x7f, 0x27, 0x04, 0xff}}, + }, + }, + } + OrRd = Sequential{ + 3: NonDivergingPalette{ + ID: "OrRd", + Name: "Orange-Red", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xfe, 0xe8, 0xc8, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xbb, 0x84, 0xff}}, + Color{'I', color.RGBA{0xe3, 0x4a, 0x33, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "OrRd", + Name: "Orange-Red", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xf0, 0xd9, 0xff}}, + Color{'E', color.RGBA{0xfd, 0xcc, 0x8a, 0xff}}, + Color{'G', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'J', color.RGBA{0xd7, 0x30, 0x1f, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "OrRd", + Name: "Orange-Red", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xf0, 0xd9, 0xff}}, + Color{'E', color.RGBA{0xfd, 0xcc, 0x8a, 0xff}}, + Color{'G', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'I', color.RGBA{0xe3, 0x4a, 0x33, 0xff}}, + Color{'K', color.RGBA{0xb3, 0x00, 0x00, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "OrRd", + Name: "Orange-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xf0, 0xd9, 0xff}}, + Color{'D', color.RGBA{0xfd, 0xd4, 0x9e, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xbb, 0x84, 0xff}}, + Color{'G', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'I', color.RGBA{0xe3, 0x4a, 0x33, 0xff}}, + Color{'K', color.RGBA{0xb3, 0x00, 0x00, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "OrRd", + Name: "Orange-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xf0, 0xd9, 0xff}}, + Color{'D', color.RGBA{0xfd, 0xd4, 0x9e, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xbb, 0x84, 0xff}}, + Color{'G', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'H', color.RGBA{0xef, 0x65, 0x48, 0xff}}, + Color{'J', color.RGBA{0xd7, 0x30, 0x1f, 0xff}}, + Color{'L', color.RGBA{0x99, 0x00, 0x00, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "OrRd", + Name: "Orange-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf7, 0xec, 0xff}}, + Color{'C', color.RGBA{0xfe, 0xe8, 0xc8, 0xff}}, + Color{'D', color.RGBA{0xfd, 0xd4, 0x9e, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xbb, 0x84, 0xff}}, + Color{'G', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'H', color.RGBA{0xef, 0x65, 0x48, 0xff}}, + Color{'J', color.RGBA{0xd7, 0x30, 0x1f, 0xff}}, + Color{'L', color.RGBA{0x99, 0x00, 0x00, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "OrRd", + Name: "Orange-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf7, 0xec, 0xff}}, + Color{'C', color.RGBA{0xfe, 0xe8, 0xc8, 0xff}}, + Color{'D', color.RGBA{0xfd, 0xd4, 0x9e, 0xff}}, + Color{'F', color.RGBA{0xfd, 0xbb, 0x84, 0xff}}, + Color{'G', color.RGBA{0xfc, 0x8d, 0x59, 0xff}}, + Color{'H', color.RGBA{0xef, 0x65, 0x48, 0xff}}, + Color{'J', color.RGBA{0xd7, 0x30, 0x1f, 0xff}}, + Color{'K', color.RGBA{0xb3, 0x00, 0x00, 0xff}}, + Color{'M', color.RGBA{0x7f, 0x00, 0x00, 0xff}}, + }, + }, + } + PuBu = Sequential{ + 3: NonDivergingPalette{ + ID: "PuBu", + Name: "Purple-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xec, 0xe7, 0xf2, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'I', color.RGBA{0x2b, 0x8c, 0xbe, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "PuBu", + Name: "Purple-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf1, 0xee, 0xf6, 0xff}}, + Color{'E', color.RGBA{0xbd, 0xc9, 0xe1, 0xff}}, + Color{'G', color.RGBA{0x74, 0xa9, 0xcf, 0xff}}, + Color{'J', color.RGBA{0x05, 0x70, 0xb0, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "PuBu", + Name: "Purple-Blue", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf1, 0xee, 0xf6, 0xff}}, + Color{'E', color.RGBA{0xbd, 0xc9, 0xe1, 0xff}}, + Color{'G', color.RGBA{0x74, 0xa9, 0xcf, 0xff}}, + Color{'I', color.RGBA{0x2b, 0x8c, 0xbe, 0xff}}, + Color{'K', color.RGBA{0x04, 0x5a, 0x8d, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "PuBu", + Name: "Purple-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf1, 0xee, 0xf6, 0xff}}, + Color{'D', color.RGBA{0xd0, 0xd1, 0xe6, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'G', color.RGBA{0x74, 0xa9, 0xcf, 0xff}}, + Color{'I', color.RGBA{0x2b, 0x8c, 0xbe, 0xff}}, + Color{'K', color.RGBA{0x04, 0x5a, 0x8d, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "PuBu", + Name: "Purple-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf1, 0xee, 0xf6, 0xff}}, + Color{'D', color.RGBA{0xd0, 0xd1, 0xe6, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'G', color.RGBA{0x74, 0xa9, 0xcf, 0xff}}, + Color{'H', color.RGBA{0x36, 0x90, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x05, 0x70, 0xb0, 0xff}}, + Color{'L', color.RGBA{0x03, 0x4e, 0x7b, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "PuBu", + Name: "Purple-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf7, 0xfb, 0xff}}, + Color{'C', color.RGBA{0xec, 0xe7, 0xf2, 0xff}}, + Color{'D', color.RGBA{0xd0, 0xd1, 0xe6, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'G', color.RGBA{0x74, 0xa9, 0xcf, 0xff}}, + Color{'H', color.RGBA{0x36, 0x90, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x05, 0x70, 0xb0, 0xff}}, + Color{'L', color.RGBA{0x03, 0x4e, 0x7b, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "PuBu", + Name: "Purple-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf7, 0xfb, 0xff}}, + Color{'C', color.RGBA{0xec, 0xe7, 0xf2, 0xff}}, + Color{'D', color.RGBA{0xd0, 0xd1, 0xe6, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'G', color.RGBA{0x74, 0xa9, 0xcf, 0xff}}, + Color{'H', color.RGBA{0x36, 0x90, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x05, 0x70, 0xb0, 0xff}}, + Color{'K', color.RGBA{0x04, 0x5a, 0x8d, 0xff}}, + Color{'M', color.RGBA{0x02, 0x38, 0x58, 0xff}}, + }, + }, + } + PuBuGn = Sequential{ + 3: NonDivergingPalette{ + ID: "PuBuGn", + Name: "Purple-Blue-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xec, 0xe2, 0xf0, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'I', color.RGBA{0x1c, 0x90, 0x99, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "PuBuGn", + Name: "Purple-Blue-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf6, 0xef, 0xf7, 0xff}}, + Color{'E', color.RGBA{0xbd, 0xc9, 0xe1, 0xff}}, + Color{'G', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + Color{'J', color.RGBA{0x02, 0x81, 0x8a, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "PuBuGn", + Name: "Purple-Blue-Green", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf6, 0xef, 0xf7, 0xff}}, + Color{'E', color.RGBA{0xbd, 0xc9, 0xe1, 0xff}}, + Color{'G', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + Color{'I', color.RGBA{0x1c, 0x90, 0x99, 0xff}}, + Color{'K', color.RGBA{0x01, 0x6c, 0x59, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "PuBuGn", + Name: "Purple-Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf6, 0xef, 0xf7, 0xff}}, + Color{'D', color.RGBA{0xd0, 0xd1, 0xe6, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'G', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + Color{'I', color.RGBA{0x1c, 0x90, 0x99, 0xff}}, + Color{'K', color.RGBA{0x01, 0x6c, 0x59, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "PuBuGn", + Name: "Purple-Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf6, 0xef, 0xf7, 0xff}}, + Color{'D', color.RGBA{0xd0, 0xd1, 0xe6, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'G', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + Color{'H', color.RGBA{0x36, 0x90, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x02, 0x81, 0x8a, 0xff}}, + Color{'L', color.RGBA{0x01, 0x64, 0x50, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "PuBuGn", + Name: "Purple-Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf7, 0xfb, 0xff}}, + Color{'C', color.RGBA{0xec, 0xe2, 0xf0, 0xff}}, + Color{'D', color.RGBA{0xd0, 0xd1, 0xe6, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'G', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + Color{'H', color.RGBA{0x36, 0x90, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x02, 0x81, 0x8a, 0xff}}, + Color{'L', color.RGBA{0x01, 0x64, 0x50, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "PuBuGn", + Name: "Purple-Blue-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf7, 0xfb, 0xff}}, + Color{'C', color.RGBA{0xec, 0xe2, 0xf0, 0xff}}, + Color{'D', color.RGBA{0xd0, 0xd1, 0xe6, 0xff}}, + Color{'F', color.RGBA{0xa6, 0xbd, 0xdb, 0xff}}, + Color{'G', color.RGBA{0x67, 0xa9, 0xcf, 0xff}}, + Color{'H', color.RGBA{0x36, 0x90, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x02, 0x81, 0x8a, 0xff}}, + Color{'K', color.RGBA{0x01, 0x6c, 0x59, 0xff}}, + Color{'M', color.RGBA{0x01, 0x46, 0x36, 0xff}}, + }, + }, + } + PuRd = Sequential{ + 3: NonDivergingPalette{ + ID: "PuRd", + Name: "Purple-Red", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xe7, 0xe1, 0xef, 0xff}}, + Color{'F', color.RGBA{0xc9, 0x94, 0xc7, 0xff}}, + Color{'I', color.RGBA{0xdd, 0x1c, 0x77, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "PuRd", + Name: "Purple-Red", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xf1, 0xee, 0xf6, 0xff}}, + Color{'E', color.RGBA{0xd7, 0xb5, 0xd8, 0xff}}, + Color{'G', color.RGBA{0xdf, 0x65, 0xb0, 0xff}}, + Color{'J', color.RGBA{0xce, 0x12, 0x56, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "PuRd", + Name: "Purple-Red", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf1, 0xee, 0xf6, 0xff}}, + Color{'E', color.RGBA{0xd7, 0xb5, 0xd8, 0xff}}, + Color{'G', color.RGBA{0xdf, 0x65, 0xb0, 0xff}}, + Color{'I', color.RGBA{0xdd, 0x1c, 0x77, 0xff}}, + Color{'K', color.RGBA{0x98, 0x00, 0x43, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "PuRd", + Name: "Purple-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf1, 0xee, 0xf6, 0xff}}, + Color{'D', color.RGBA{0xd4, 0xb9, 0xda, 0xff}}, + Color{'F', color.RGBA{0xc9, 0x94, 0xc7, 0xff}}, + Color{'G', color.RGBA{0xdf, 0x65, 0xb0, 0xff}}, + Color{'I', color.RGBA{0xdd, 0x1c, 0x77, 0xff}}, + Color{'K', color.RGBA{0x98, 0x00, 0x43, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "PuRd", + Name: "Purple-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf1, 0xee, 0xf6, 0xff}}, + Color{'D', color.RGBA{0xd4, 0xb9, 0xda, 0xff}}, + Color{'F', color.RGBA{0xc9, 0x94, 0xc7, 0xff}}, + Color{'G', color.RGBA{0xdf, 0x65, 0xb0, 0xff}}, + Color{'H', color.RGBA{0xe7, 0x29, 0x8a, 0xff}}, + Color{'J', color.RGBA{0xce, 0x12, 0x56, 0xff}}, + Color{'L', color.RGBA{0x91, 0x00, 0x3f, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "PuRd", + Name: "Purple-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xf4, 0xf9, 0xff}}, + Color{'C', color.RGBA{0xe7, 0xe1, 0xef, 0xff}}, + Color{'D', color.RGBA{0xd4, 0xb9, 0xda, 0xff}}, + Color{'F', color.RGBA{0xc9, 0x94, 0xc7, 0xff}}, + Color{'G', color.RGBA{0xdf, 0x65, 0xb0, 0xff}}, + Color{'H', color.RGBA{0xe7, 0x29, 0x8a, 0xff}}, + Color{'J', color.RGBA{0xce, 0x12, 0x56, 0xff}}, + Color{'L', color.RGBA{0x91, 0x00, 0x3f, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "PuRd", + Name: "Purple-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xf7, 0xf4, 0xf9, 0xff}}, + Color{'C', color.RGBA{0xe7, 0xe1, 0xef, 0xff}}, + Color{'D', color.RGBA{0xd4, 0xb9, 0xda, 0xff}}, + Color{'F', color.RGBA{0xc9, 0x94, 0xc7, 0xff}}, + Color{'G', color.RGBA{0xdf, 0x65, 0xb0, 0xff}}, + Color{'H', color.RGBA{0xe7, 0x29, 0x8a, 0xff}}, + Color{'J', color.RGBA{0xce, 0x12, 0x56, 0xff}}, + Color{'K', color.RGBA{0x98, 0x00, 0x43, 0xff}}, + Color{'M', color.RGBA{0x67, 0x00, 0x1f, 0xff}}, + }, + }, + } + Purples = Sequential{ + 3: NonDivergingPalette{ + ID: "Purples", + Name: "Purples", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xef, 0xed, 0xf5, 0xff}}, + Color{'F', color.RGBA{0xbc, 0xbd, 0xdc, 0xff}}, + Color{'I', color.RGBA{0x75, 0x6b, 0xb1, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Purples", + Name: "Purples", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xf2, 0xf0, 0xf7, 0xff}}, + Color{'E', color.RGBA{0xcb, 0xc9, 0xe2, 0xff}}, + Color{'G', color.RGBA{0x9e, 0x9a, 0xc8, 0xff}}, + Color{'J', color.RGBA{0x6a, 0x51, 0xa3, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Purples", + Name: "Purples", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf2, 0xf0, 0xf7, 0xff}}, + Color{'E', color.RGBA{0xcb, 0xc9, 0xe2, 0xff}}, + Color{'G', color.RGBA{0x9e, 0x9a, 0xc8, 0xff}}, + Color{'I', color.RGBA{0x75, 0x6b, 0xb1, 0xff}}, + Color{'K', color.RGBA{0x54, 0x27, 0x8f, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Purples", + Name: "Purples", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf2, 0xf0, 0xf7, 0xff}}, + Color{'D', color.RGBA{0xda, 0xda, 0xeb, 0xff}}, + Color{'F', color.RGBA{0xbc, 0xbd, 0xdc, 0xff}}, + Color{'G', color.RGBA{0x9e, 0x9a, 0xc8, 0xff}}, + Color{'I', color.RGBA{0x75, 0x6b, 0xb1, 0xff}}, + Color{'K', color.RGBA{0x54, 0x27, 0x8f, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Purples", + Name: "Purples", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xf2, 0xf0, 0xf7, 0xff}}, + Color{'D', color.RGBA{0xda, 0xda, 0xeb, 0xff}}, + Color{'F', color.RGBA{0xbc, 0xbd, 0xdc, 0xff}}, + Color{'G', color.RGBA{0x9e, 0x9a, 0xc8, 0xff}}, + Color{'H', color.RGBA{0x80, 0x7d, 0xba, 0xff}}, + Color{'J', color.RGBA{0x6a, 0x51, 0xa3, 0xff}}, + Color{'L', color.RGBA{0x4a, 0x14, 0x86, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Purples", + Name: "Purples", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xfc, 0xfb, 0xfd, 0xff}}, + Color{'C', color.RGBA{0xef, 0xed, 0xf5, 0xff}}, + Color{'D', color.RGBA{0xda, 0xda, 0xeb, 0xff}}, + Color{'F', color.RGBA{0xbc, 0xbd, 0xdc, 0xff}}, + Color{'G', color.RGBA{0x9e, 0x9a, 0xc8, 0xff}}, + Color{'H', color.RGBA{0x80, 0x7d, 0xba, 0xff}}, + Color{'J', color.RGBA{0x6a, 0x51, 0xa3, 0xff}}, + Color{'L', color.RGBA{0x4a, 0x14, 0x86, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Purples", + Name: "Purples", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xfc, 0xfb, 0xfd, 0xff}}, + Color{'C', color.RGBA{0xef, 0xed, 0xf5, 0xff}}, + Color{'D', color.RGBA{0xda, 0xda, 0xeb, 0xff}}, + Color{'F', color.RGBA{0xbc, 0xbd, 0xdc, 0xff}}, + Color{'G', color.RGBA{0x9e, 0x9a, 0xc8, 0xff}}, + Color{'H', color.RGBA{0x80, 0x7d, 0xba, 0xff}}, + Color{'J', color.RGBA{0x6a, 0x51, 0xa3, 0xff}}, + Color{'K', color.RGBA{0x54, 0x27, 0x8f, 0xff}}, + Color{'M', color.RGBA{0x3f, 0x00, 0x7d, 0xff}}, + }, + }, + } + RdPu = Sequential{ + 3: NonDivergingPalette{ + ID: "RdPu", + Name: "Red-Purple", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xfd, 0xe0, 0xdd, 0xff}}, + Color{'F', color.RGBA{0xfa, 0x9f, 0xb5, 0xff}}, + Color{'I', color.RGBA{0xc5, 0x1b, 0x8a, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "RdPu", + Name: "Red-Purple", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xeb, 0xe2, 0xff}}, + Color{'E', color.RGBA{0xfb, 0xb4, 0xb9, 0xff}}, + Color{'G', color.RGBA{0xf7, 0x68, 0xa1, 0xff}}, + Color{'J', color.RGBA{0xae, 0x01, 0x7e, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "RdPu", + Name: "Red-Purple", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xeb, 0xe2, 0xff}}, + Color{'E', color.RGBA{0xfb, 0xb4, 0xb9, 0xff}}, + Color{'G', color.RGBA{0xf7, 0x68, 0xa1, 0xff}}, + Color{'I', color.RGBA{0xc5, 0x1b, 0x8a, 0xff}}, + Color{'K', color.RGBA{0x7a, 0x01, 0x77, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "RdPu", + Name: "Red-Purple", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xeb, 0xe2, 0xff}}, + Color{'D', color.RGBA{0xfc, 0xc5, 0xc0, 0xff}}, + Color{'F', color.RGBA{0xfa, 0x9f, 0xb5, 0xff}}, + Color{'G', color.RGBA{0xf7, 0x68, 0xa1, 0xff}}, + Color{'I', color.RGBA{0xc5, 0x1b, 0x8a, 0xff}}, + Color{'K', color.RGBA{0x7a, 0x01, 0x77, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "RdPu", + Name: "Red-Purple", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xeb, 0xe2, 0xff}}, + Color{'D', color.RGBA{0xfc, 0xc5, 0xc0, 0xff}}, + Color{'F', color.RGBA{0xfa, 0x9f, 0xb5, 0xff}}, + Color{'G', color.RGBA{0xf7, 0x68, 0xa1, 0xff}}, + Color{'H', color.RGBA{0xdd, 0x34, 0x97, 0xff}}, + Color{'J', color.RGBA{0xae, 0x01, 0x7e, 0xff}}, + Color{'L', color.RGBA{0x7a, 0x01, 0x77, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "RdPu", + Name: "Red-Purple", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf7, 0xf3, 0xff}}, + Color{'C', color.RGBA{0xfd, 0xe0, 0xdd, 0xff}}, + Color{'D', color.RGBA{0xfc, 0xc5, 0xc0, 0xff}}, + Color{'F', color.RGBA{0xfa, 0x9f, 0xb5, 0xff}}, + Color{'G', color.RGBA{0xf7, 0x68, 0xa1, 0xff}}, + Color{'H', color.RGBA{0xdd, 0x34, 0x97, 0xff}}, + Color{'J', color.RGBA{0xae, 0x01, 0x7e, 0xff}}, + Color{'L', color.RGBA{0x7a, 0x01, 0x77, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "RdPu", + Name: "Red-Purple", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf7, 0xf3, 0xff}}, + Color{'C', color.RGBA{0xfd, 0xe0, 0xdd, 0xff}}, + Color{'D', color.RGBA{0xfc, 0xc5, 0xc0, 0xff}}, + Color{'F', color.RGBA{0xfa, 0x9f, 0xb5, 0xff}}, + Color{'G', color.RGBA{0xf7, 0x68, 0xa1, 0xff}}, + Color{'H', color.RGBA{0xdd, 0x34, 0x97, 0xff}}, + Color{'J', color.RGBA{0xae, 0x01, 0x7e, 0xff}}, + Color{'K', color.RGBA{0x7a, 0x01, 0x77, 0xff}}, + Color{'M', color.RGBA{0x49, 0x00, 0x6a, 0xff}}, + }, + }, + } + Reds = Sequential{ + 3: NonDivergingPalette{ + ID: "Reds", + Name: "Reds", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xfe, 0xe0, 0xd2, 0xff}}, + Color{'F', color.RGBA{0xfc, 0x92, 0x72, 0xff}}, + Color{'I', color.RGBA{0xde, 0x2d, 0x26, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "Reds", + Name: "Reds", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xe5, 0xd9, 0xff}}, + Color{'E', color.RGBA{0xfc, 0xae, 0x91, 0xff}}, + Color{'G', color.RGBA{0xfb, 0x6a, 0x4a, 0xff}}, + Color{'J', color.RGBA{0xcb, 0x18, 0x1d, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "Reds", + Name: "Reds", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xe5, 0xd9, 0xff}}, + Color{'E', color.RGBA{0xfc, 0xae, 0x91, 0xff}}, + Color{'G', color.RGBA{0xfb, 0x6a, 0x4a, 0xff}}, + Color{'I', color.RGBA{0xde, 0x2d, 0x26, 0xff}}, + Color{'K', color.RGBA{0xa5, 0x0f, 0x15, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "Reds", + Name: "Reds", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xe5, 0xd9, 0xff}}, + Color{'D', color.RGBA{0xfc, 0xbb, 0xa1, 0xff}}, + Color{'F', color.RGBA{0xfc, 0x92, 0x72, 0xff}}, + Color{'G', color.RGBA{0xfb, 0x6a, 0x4a, 0xff}}, + Color{'I', color.RGBA{0xde, 0x2d, 0x26, 0xff}}, + Color{'K', color.RGBA{0xa5, 0x0f, 0x15, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "Reds", + Name: "Reds", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xfe, 0xe5, 0xd9, 0xff}}, + Color{'D', color.RGBA{0xfc, 0xbb, 0xa1, 0xff}}, + Color{'F', color.RGBA{0xfc, 0x92, 0x72, 0xff}}, + Color{'G', color.RGBA{0xfb, 0x6a, 0x4a, 0xff}}, + Color{'H', color.RGBA{0xef, 0x3b, 0x2c, 0xff}}, + Color{'J', color.RGBA{0xcb, 0x18, 0x1d, 0xff}}, + Color{'L', color.RGBA{0x99, 0x00, 0x0d, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "Reds", + Name: "Reds", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf5, 0xf0, 0xff}}, + Color{'C', color.RGBA{0xfe, 0xe0, 0xd2, 0xff}}, + Color{'D', color.RGBA{0xfc, 0xbb, 0xa1, 0xff}}, + Color{'F', color.RGBA{0xfc, 0x92, 0x72, 0xff}}, + Color{'G', color.RGBA{0xfb, 0x6a, 0x4a, 0xff}}, + Color{'H', color.RGBA{0xef, 0x3b, 0x2c, 0xff}}, + Color{'J', color.RGBA{0xcb, 0x18, 0x1d, 0xff}}, + Color{'L', color.RGBA{0x99, 0x00, 0x0d, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "Reds", + Name: "Reds", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xf5, 0xf0, 0xff}}, + Color{'C', color.RGBA{0xfe, 0xe0, 0xd2, 0xff}}, + Color{'D', color.RGBA{0xfc, 0xbb, 0xa1, 0xff}}, + Color{'F', color.RGBA{0xfc, 0x92, 0x72, 0xff}}, + Color{'G', color.RGBA{0xfb, 0x6a, 0x4a, 0xff}}, + Color{'H', color.RGBA{0xef, 0x3b, 0x2c, 0xff}}, + Color{'J', color.RGBA{0xcb, 0x18, 0x1d, 0xff}}, + Color{'K', color.RGBA{0xa5, 0x0f, 0x15, 0xff}}, + Color{'M', color.RGBA{0x67, 0x00, 0x0d, 0xff}}, + }, + }, + } + YlGn = Sequential{ + 3: NonDivergingPalette{ + ID: "YlGn", + Name: "Yellow-Green", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Unsure, + Color: []color.Color{ + Color{'C', color.RGBA{0xf7, 0xfc, 0xb9, 0xff}}, + Color{'F', color.RGBA{0xad, 0xdd, 0x8e, 0xff}}, + Color{'I', color.RGBA{0x31, 0xa3, 0x54, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "YlGn", + Name: "Yellow-Green", + Laptop: Unsure, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'E', color.RGBA{0xc2, 0xe6, 0x99, 0xff}}, + Color{'G', color.RGBA{0x78, 0xc6, 0x79, 0xff}}, + Color{'J', color.RGBA{0x23, 0x84, 0x43, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "YlGn", + Name: "Yellow-Green", + Laptop: Bad, + CRT: Good, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'E', color.RGBA{0xc2, 0xe6, 0x99, 0xff}}, + Color{'G', color.RGBA{0x78, 0xc6, 0x79, 0xff}}, + Color{'I', color.RGBA{0x31, 0xa3, 0x54, 0xff}}, + Color{'K', color.RGBA{0x00, 0x68, 0x37, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "YlGn", + Name: "Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'D', color.RGBA{0xd9, 0xf0, 0xa3, 0xff}}, + Color{'F', color.RGBA{0xad, 0xdd, 0x8e, 0xff}}, + Color{'G', color.RGBA{0x78, 0xc6, 0x79, 0xff}}, + Color{'I', color.RGBA{0x31, 0xa3, 0x54, 0xff}}, + Color{'K', color.RGBA{0x00, 0x68, 0x37, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "YlGn", + Name: "Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'D', color.RGBA{0xd9, 0xf0, 0xa3, 0xff}}, + Color{'F', color.RGBA{0xad, 0xdd, 0x8e, 0xff}}, + Color{'G', color.RGBA{0x78, 0xc6, 0x79, 0xff}}, + Color{'H', color.RGBA{0x41, 0xab, 0x5d, 0xff}}, + Color{'J', color.RGBA{0x23, 0x84, 0x43, 0xff}}, + Color{'L', color.RGBA{0x00, 0x5a, 0x32, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "YlGn", + Name: "Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xe5, 0xff}}, + Color{'C', color.RGBA{0xf7, 0xfc, 0xb9, 0xff}}, + Color{'D', color.RGBA{0xd9, 0xf0, 0xa3, 0xff}}, + Color{'F', color.RGBA{0xad, 0xdd, 0x8e, 0xff}}, + Color{'G', color.RGBA{0x78, 0xc6, 0x79, 0xff}}, + Color{'H', color.RGBA{0x41, 0xab, 0x5d, 0xff}}, + Color{'J', color.RGBA{0x23, 0x84, 0x43, 0xff}}, + Color{'L', color.RGBA{0x00, 0x5a, 0x32, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "YlGn", + Name: "Yellow-Green", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xe5, 0xff}}, + Color{'C', color.RGBA{0xf7, 0xfc, 0xb9, 0xff}}, + Color{'D', color.RGBA{0xd9, 0xf0, 0xa3, 0xff}}, + Color{'F', color.RGBA{0xad, 0xdd, 0x8e, 0xff}}, + Color{'G', color.RGBA{0x78, 0xc6, 0x79, 0xff}}, + Color{'H', color.RGBA{0x41, 0xab, 0x5d, 0xff}}, + Color{'J', color.RGBA{0x23, 0x84, 0x43, 0xff}}, + Color{'K', color.RGBA{0x00, 0x68, 0x37, 0xff}}, + Color{'M', color.RGBA{0x00, 0x45, 0x29, 0xff}}, + }, + }, + } + YlGnBu = Sequential{ + 3: NonDivergingPalette{ + ID: "YlGnBu", + Name: "Yellow-Green-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xed, 0xf8, 0xb1, 0xff}}, + Color{'F', color.RGBA{0x7f, 0xcd, 0xbb, 0xff}}, + Color{'I', color.RGBA{0x2c, 0x7f, 0xb8, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "YlGnBu", + Name: "Yellow-Green-Blue", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'E', color.RGBA{0xa1, 0xda, 0xb4, 0xff}}, + Color{'G', color.RGBA{0x41, 0xb6, 0xc4, 0xff}}, + Color{'J', color.RGBA{0x22, 0x5e, 0xa8, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "YlGnBu", + Name: "Yellow-Green-Blue", + Laptop: Unsure, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'E', color.RGBA{0xa1, 0xda, 0xb4, 0xff}}, + Color{'G', color.RGBA{0x41, 0xb6, 0xc4, 0xff}}, + Color{'I', color.RGBA{0x2c, 0x7f, 0xb8, 0xff}}, + Color{'K', color.RGBA{0x25, 0x34, 0x94, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "YlGnBu", + Name: "Yellow-Green-Blue", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'D', color.RGBA{0xc7, 0xe9, 0xb4, 0xff}}, + Color{'F', color.RGBA{0x7f, 0xcd, 0xbb, 0xff}}, + Color{'G', color.RGBA{0x41, 0xb6, 0xc4, 0xff}}, + Color{'I', color.RGBA{0x2c, 0x7f, 0xb8, 0xff}}, + Color{'K', color.RGBA{0x25, 0x34, 0x94, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "YlGnBu", + Name: "Yellow-Green-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'D', color.RGBA{0xc7, 0xe9, 0xb4, 0xff}}, + Color{'F', color.RGBA{0x7f, 0xcd, 0xbb, 0xff}}, + Color{'G', color.RGBA{0x41, 0xb6, 0xc4, 0xff}}, + Color{'H', color.RGBA{0x1d, 0x91, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x22, 0x5e, 0xa8, 0xff}}, + Color{'L', color.RGBA{0x0c, 0x2c, 0x84, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "YlGnBu", + Name: "Yellow-Green-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xd9, 0xff}}, + Color{'C', color.RGBA{0xed, 0xf8, 0xb1, 0xff}}, + Color{'D', color.RGBA{0xc7, 0xe9, 0xb4, 0xff}}, + Color{'F', color.RGBA{0x7f, 0xcd, 0xbb, 0xff}}, + Color{'G', color.RGBA{0x41, 0xb6, 0xc4, 0xff}}, + Color{'H', color.RGBA{0x1d, 0x91, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x22, 0x5e, 0xa8, 0xff}}, + Color{'L', color.RGBA{0x0c, 0x2c, 0x84, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "YlGnBu", + Name: "Yellow-Green-Blue", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xd9, 0xff}}, + Color{'C', color.RGBA{0xed, 0xf8, 0xb1, 0xff}}, + Color{'D', color.RGBA{0xc7, 0xe9, 0xb4, 0xff}}, + Color{'F', color.RGBA{0x7f, 0xcd, 0xbb, 0xff}}, + Color{'G', color.RGBA{0x41, 0xb6, 0xc4, 0xff}}, + Color{'H', color.RGBA{0x1d, 0x91, 0xc0, 0xff}}, + Color{'J', color.RGBA{0x22, 0x5e, 0xa8, 0xff}}, + Color{'K', color.RGBA{0x25, 0x34, 0x94, 0xff}}, + Color{'M', color.RGBA{0x08, 0x1d, 0x58, 0xff}}, + }, + }, + } + YlOrBr = Sequential{ + 3: NonDivergingPalette{ + ID: "YlOrBr", + Name: "Yellow-Orange-Brown", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xff, 0xf7, 0xbc, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xc4, 0x4f, 0xff}}, + Color{'I', color.RGBA{0xd9, 0x5f, 0x0e, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "YlOrBr", + Name: "Yellow-Orange-Brown", + Laptop: Unsure, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xd4, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xd9, 0x8e, 0xff}}, + Color{'G', color.RGBA{0xfe, 0x99, 0x29, 0xff}}, + Color{'J', color.RGBA{0xcc, 0x4c, 0x02, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "YlOrBr", + Name: "Yellow-Orange-Brown", + Laptop: Bad, + CRT: Unsure, + ColorBlind: Good, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xd4, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xd9, 0x8e, 0xff}}, + Color{'G', color.RGBA{0xfe, 0x99, 0x29, 0xff}}, + Color{'I', color.RGBA{0xd9, 0x5f, 0x0e, 0xff}}, + Color{'K', color.RGBA{0x99, 0x34, 0x04, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "YlOrBr", + Name: "Yellow-Orange-Brown", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xd4, 0xff}}, + Color{'D', color.RGBA{0xfe, 0xe3, 0x91, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xc4, 0x4f, 0xff}}, + Color{'G', color.RGBA{0xfe, 0x99, 0x29, 0xff}}, + Color{'I', color.RGBA{0xd9, 0x5f, 0x0e, 0xff}}, + Color{'K', color.RGBA{0x99, 0x34, 0x04, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "YlOrBr", + Name: "Yellow-Orange-Brown", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xd4, 0xff}}, + Color{'D', color.RGBA{0xfe, 0xe3, 0x91, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xc4, 0x4f, 0xff}}, + Color{'G', color.RGBA{0xfe, 0x99, 0x29, 0xff}}, + Color{'H', color.RGBA{0xec, 0x70, 0x14, 0xff}}, + Color{'J', color.RGBA{0xcc, 0x4c, 0x02, 0xff}}, + Color{'L', color.RGBA{0x8c, 0x2d, 0x04, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "YlOrBr", + Name: "Yellow-Orange-Brown", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xe5, 0xff}}, + Color{'C', color.RGBA{0xff, 0xf7, 0xbc, 0xff}}, + Color{'D', color.RGBA{0xfe, 0xe3, 0x91, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xc4, 0x4f, 0xff}}, + Color{'G', color.RGBA{0xfe, 0x99, 0x29, 0xff}}, + Color{'H', color.RGBA{0xec, 0x70, 0x14, 0xff}}, + Color{'J', color.RGBA{0xcc, 0x4c, 0x02, 0xff}}, + Color{'L', color.RGBA{0x8c, 0x2d, 0x04, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "YlOrBr", + Name: "Yellow-Orange-Brown", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xe5, 0xff}}, + Color{'C', color.RGBA{0xff, 0xf7, 0xbc, 0xff}}, + Color{'D', color.RGBA{0xfe, 0xe3, 0x91, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xc4, 0x4f, 0xff}}, + Color{'G', color.RGBA{0xfe, 0x99, 0x29, 0xff}}, + Color{'H', color.RGBA{0xec, 0x70, 0x14, 0xff}}, + Color{'J', color.RGBA{0xcc, 0x4c, 0x02, 0xff}}, + Color{'K', color.RGBA{0x99, 0x34, 0x04, 0xff}}, + Color{'M', color.RGBA{0x66, 0x25, 0x06, 0xff}}, + }, + }, + } + YlOrRd = Sequential{ + 3: NonDivergingPalette{ + ID: "YlOrRd", + Name: "Yellow-Orange-Red", + Laptop: Good, + CRT: Good, + ColorBlind: Good, + Copy: Good, + Projector: Good, + Color: []color.Color{ + Color{'C', color.RGBA{0xff, 0xed, 0xa0, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xb2, 0x4c, 0xff}}, + Color{'I', color.RGBA{0xf0, 0x3b, 0x20, 0xff}}, + }, + }, + 4: NonDivergingPalette{ + ID: "YlOrRd", + Name: "Yellow-Orange-Red", + Laptop: Unsure, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xb2, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xcc, 0x5c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'J', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + }, + }, + 5: NonDivergingPalette{ + ID: "YlOrRd", + Name: "Yellow-Orange-Red", + Laptop: Unsure, + CRT: Good, + ColorBlind: Good, + Copy: Unsure, + Projector: Good, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xb2, 0xff}}, + Color{'E', color.RGBA{0xfe, 0xcc, 0x5c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'I', color.RGBA{0xf0, 0x3b, 0x20, 0xff}}, + Color{'K', color.RGBA{0xbd, 0x00, 0x26, 0xff}}, + }, + }, + 6: NonDivergingPalette{ + ID: "YlOrRd", + Name: "Yellow-Orange-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Unsure, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xb2, 0xff}}, + Color{'D', color.RGBA{0xfe, 0xd9, 0x76, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xb2, 0x4c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'I', color.RGBA{0xf0, 0x3b, 0x20, 0xff}}, + Color{'K', color.RGBA{0xbd, 0x00, 0x26, 0xff}}, + }, + }, + 7: NonDivergingPalette{ + ID: "YlOrRd", + Name: "Yellow-Orange-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'B', color.RGBA{0xff, 0xff, 0xb2, 0xff}}, + Color{'D', color.RGBA{0xfe, 0xd9, 0x76, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xb2, 0x4c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'H', color.RGBA{0xfc, 0x4e, 0x2a, 0xff}}, + Color{'J', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'L', color.RGBA{0xb1, 0x00, 0x26, 0xff}}, + }, + }, + 8: NonDivergingPalette{ + ID: "YlOrRd", + Name: "Yellow-Orange-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'C', color.RGBA{0xff, 0xed, 0xa0, 0xff}}, + Color{'D', color.RGBA{0xfe, 0xd9, 0x76, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xb2, 0x4c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'H', color.RGBA{0xfc, 0x4e, 0x2a, 0xff}}, + Color{'J', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'L', color.RGBA{0xb1, 0x00, 0x26, 0xff}}, + }, + }, + 9: NonDivergingPalette{ + ID: "YlOrRd", + Name: "Yellow-Orange-Red", + Laptop: Bad, + CRT: Bad, + ColorBlind: Good, + Copy: Bad, + Projector: Bad, + Color: []color.Color{ + Color{'A', color.RGBA{0xff, 0xff, 0xcc, 0xff}}, + Color{'C', color.RGBA{0xff, 0xed, 0xa0, 0xff}}, + Color{'D', color.RGBA{0xfe, 0xd9, 0x76, 0xff}}, + Color{'F', color.RGBA{0xfe, 0xb2, 0x4c, 0xff}}, + Color{'G', color.RGBA{0xfd, 0x8d, 0x3c, 0xff}}, + Color{'H', color.RGBA{0xfc, 0x4e, 0x2a, 0xff}}, + Color{'J', color.RGBA{0xe3, 0x1a, 0x1c, 0xff}}, + Color{'K', color.RGBA{0xbd, 0x00, 0x26, 0xff}}, + Color{'M', color.RGBA{0x80, 0x00, 0x26, 0xff}}, + }, + }, + } +) + +var ( + diverging = map[string]Diverging{ + "BrBG": BrBG, + "PiYG": PiYG, + "PRGn": PRGn, + "PuOr": PuOr, + "RdBu": RdBu, + "RdGy": RdGy, + "RdYlBu": RdYlBu, + "RdYlGn": RdYlGn, + "Spectral": Spectral, + } + qualitative = map[string]Qualitative{ + "Accent": Accent, + "Dark2": Dark2, + "Paired": Paired, + "Pastel1": Pastel1, + "Pastel2": Pastel2, + "Set1": Set1, + "Set2": Set2, + "Set3": Set3, + } + sequential = map[string]Sequential{ + "Blues": Blues, + "BuGn": BuGn, + "BuPu": BuPu, + "GnBu": GnBu, + "Greens": Greens, + "Greys": Greys, + "Oranges": Oranges, + "OrRd": OrRd, + "PuBu": PuBu, + "PuBuGn": PuBuGn, + "PuRd": PuRd, + "Purples": Purples, + "RdPu": RdPu, + "Reds": Reds, + "YlGn": YlGn, + "YlGnBu": YlGnBu, + "YlOrBr": YlOrBr, + "YlOrRd": YlOrRd, + } + all = map[string]interface{}{ + "BrBG": BrBG, + "PiYG": PiYG, + "PRGn": PRGn, + "PuOr": PuOr, + "RdBu": RdBu, + "RdGy": RdGy, + "RdYlBu": RdYlBu, + "RdYlGn": RdYlGn, + "Spectral": Spectral, + "Accent": Accent, + "Dark2": Dark2, + "Paired": Paired, + "Pastel1": Pastel1, + "Pastel2": Pastel2, + "Set1": Set1, + "Set2": Set2, + "Set3": Set3, + "Blues": Blues, + "BuGn": BuGn, + "BuPu": BuPu, + "GnBu": GnBu, + "Greens": Greens, + "Greys": Greys, + "Oranges": Oranges, + "OrRd": OrRd, + "PuBu": PuBu, + "PuBuGn": PuBuGn, + "PuRd": PuRd, + "Purples": Purples, + "RdPu": RdPu, + "Reds": Reds, + "YlGn": YlGn, + "YlGnBu": YlGnBu, + "YlOrBr": YlOrBr, + "YlOrRd": YlOrRd, + } +) diff --git a/palette/hsva.go b/palette/hsva.go new file mode 100644 index 00000000..cefa1ed1 --- /dev/null +++ b/palette/hsva.go @@ -0,0 +1,116 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2011-2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package palette + +import ( + "image/color" + "math" +) + +// HSVA represents a Hue/Saturation/Value/Alpha color. +// H, S, V and A are valid within [0, 1]. +type HSVA struct { + H, S, V, A float64 +} + +// HSVAModel converts any color.Color to an HSVA color. +var HSVAModel = color.ModelFunc(hsvaModel) + +func hsvaModel(c color.Color) color.Color { + if _, ok := c.(HSVA); ok { + return c + } + return rgbaToHsva(c.RGBA()) +} + +// Convert r, g, b, a to HSVA +func rgbaToHsva(r, g, b, a uint32) HSVA { + red := float64(r) + blue := float64(b) + green := float64(g) + + max := math.Max(red, green) + max = math.Max(max, blue) + min := math.Min(red, green) + min = math.Min(min, blue) + chroma := max - min + + var hue float64 + switch { + case chroma == 0: + // This should really be math.NaN() since we have a 0 length vector, + // but 0 seems to be the convention and it may simplify imports in + // dependent packages. + hue = 0 + case max == red: + hue = math.Mod((green-blue)/chroma, 6) + case max == green: + hue = (blue-red)/chroma + 2 + case max == blue: + hue = (red-green)/chroma + 4 + } + + hue /= 6 + + var s float64 + if chroma != 0 { + s = chroma / max + } + + return HSVA{ + H: math.Mod(math.Mod(hue, 1)+1, 1), + S: s, + V: max / math.MaxUint16, + A: float64(a) / math.MaxUint16, + } +} + +// RGBA allows HSVAColor to satisfy the color.Color interface. +func (c HSVA) RGBA() (r, g, b, a uint32) { + var red, green, blue float64 + + a = uint32(math.MaxUint16 * c.A) + + if c.V == 0 { + return + } + + if c.S == 0 { + r, g, b = uint32(math.MaxUint16*c.V), uint32(math.MaxUint16*c.V), uint32(math.MaxUint16*c.V) + return + } + + chroma := c.V * c.S + m := c.V - chroma + + if !math.IsNaN(c.H) { + hue := math.Mod(c.H, 1) * 6 + x := chroma * (1 - math.Abs(math.Mod(hue, 2)-1)) + switch math.Floor(hue) { + case 0: + red, green = chroma, x + case 1: + red, green = x, chroma + case 2: + green, blue = chroma, x + case 3: + green, blue = x, chroma + case 4: + red, blue = x, chroma + case 5: + red, blue = chroma, x + } + } else { + red, green, blue = 0, 0, 0 + } + + r, g, b = uint32(math.MaxUint16*(red+m)), uint32(math.MaxUint16*(green+m)), uint32(math.MaxUint16*(blue+m)) + + return +} diff --git a/palette/hsva_test.go b/palette/hsva_test.go new file mode 100644 index 00000000..479b6b10 --- /dev/null +++ b/palette/hsva_test.go @@ -0,0 +1,83 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2011-2012 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package palette + +import ( + "image/color" + "testing" +) + +func withinEpsilon(a, b, epsilon uint32) bool { + d := int64(a) - int64(b) + if d < 0 { + if d == -d { + panic("color: weird number overflow") + } + d = -d + } + return d <= int64(epsilon) +} + +// Tests + +func TestColor(t *testing.T) { + for r := 0; r < 256; r += 5 { + for g := 0; g < 256; g += 5 { + for b := 0; b < 256; b += 5 { + col := color.RGBA{uint8(r), uint8(g), uint8(b), 0} + cDirectR, cDirectG, cDirectB, cDirectA := col.RGBA() + hsva := rgbaToHsva(col.RGBA()) + if hsva.H < 0 || hsva.H > 1 { + t.Errorf("unexpected values for H: want [0, 1] got:%f", hsva.H) + } + if hsva.S < 0 || hsva.S > 1 { + t.Errorf("unexpected values for S: want [0, 1] got:%f", hsva.S) + } + if hsva.V < 0 || hsva.V > 1 { + t.Errorf("unexpected values for V: want [0, 1] got:%f", hsva.V) + } + + cFromHSVR, cFromHSVG, cFromHSVB, cFromHSVA := hsva.RGBA() + if cFromHSVR < 0 || cFromHSVR > 0xFFFF { + t.Errorf("unexpected values for H: want [0x0, 0xFFFF] got:%f", hsva.H) + } + if cFromHSVG < 0 || cFromHSVG > 0xFFFF { + t.Errorf("unexpected values for S: want [0x0, 0xFFFF] got:%f", hsva.S) + } + if cFromHSVB < 0 || cFromHSVB > 0xFFFF { + t.Errorf("unexpected values for V: want [0x0, 0xFFFF] got:%f", hsva.V) + } + if cFromHSVA < 0 || cFromHSVA > 0xFFFF { + t.Errorf("unexpected values for V: want [0x0, 0xFFFF] got:%f", hsva.V) + } + + back := rgbaToHsva(color.RGBA{uint8(cFromHSVR >> 8), uint8(cFromHSVG >> 8), uint8(cFromHSVB >> 8), uint8(cFromHSVA)}.RGBA()) + if hsva != back { + t.Errorf("roundtrip error: got:%#v want:%#v", back, hsva) + } + const epsilon = 1 + if !withinEpsilon(cFromHSVR, cDirectR, epsilon) { + t.Errorf("roundtrip error for R: got:%d want:%d", cFromHSVR, cDirectR) + } + if !withinEpsilon(cFromHSVG, cDirectG, epsilon) { + t.Errorf("roundtrip error for G: got:%d want:%d %d", cFromHSVG, cDirectG, cFromHSVG-cDirectG) + } + if !withinEpsilon(cFromHSVB, cDirectB, epsilon) { + t.Errorf("roundtrip error for B: got:%d want:%d", cFromHSVB, cDirectB) + } + if cFromHSVA != cDirectA { + t.Errorf("roundtrip error for A: got:%d want:%d", cFromHSVA, cDirectA) + } + if t.Failed() { + return + } + } + } + } +} diff --git a/palette/palette.go b/palette/palette.go new file mode 100644 index 00000000..ea9deceb --- /dev/null +++ b/palette/palette.go @@ -0,0 +1,102 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2013 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package palette provides basic color palette handling. +package palette + +import ( + "image/color" + "math" +) + +// Palette is a collection of colors ordered into a palette. +type Palette interface { + Colors() []color.Color +} + +// Hue represents a hue in HSV color space. Valid Hues are within [0, 1]. +type Hue float64 + +const ( + Red Hue = Hue(iota) / 6 + Yellow + Green + Cyan + Blue + Magenta +) + +// Complement returns the complementary hue of a Hue. +func (h Hue) Complement() Hue { return Hue(math.Mod(float64(h+0.5), 1)) } + +type palette []color.Color + +func (p palette) Colors() []color.Color { return p } + +// Rainbow returns a rainbow palette with the specified number of colors, saturation +// value and alpha, and hues in the specified range. +func Rainbow(colors int, start, end Hue, sat, val, alpha float64) Palette { + p := make(palette, colors) + hd := float64(end-start) / float64(colors-1) + c := HSVA{H: float64(start), V: val, S: sat, A: alpha} + for i := range p { + p[i] = color.NRGBAModel.Convert(c) + c.H += hd + } + + return p +} + +// Heat returns a red to yellow palette with the specified number of colors and alpha. +func Heat(colors int, alpha float64) Palette { + p := make(palette, colors) + j := colors / 4 + i := colors - j + + hd := float64(Yellow-Red) / float64(i-1) + c := HSVA{H: float64(Red), V: 1, S: 1, A: alpha} + for k := range p[:i] { + p[k] = color.NRGBAModel.Convert(c) + c.H += hd + } + if j == 0 { + return p + } + + c.H = float64(Yellow) + start, end := 1-1/(2*float64(j)), 1/(2*float64(j)) + c.S = start + sd := (end - start) / float64(j-1) + for k := range p[i:] { + p[k+i] = color.NRGBAModel.Convert(c) + c.S += sd + } + + return p +} + +// Radial return a diverging palette across the specified range, through white and with +// the specified alpha. +func Radial(colors int, start, end Hue, alpha float64) Palette { + p := make(palette, colors) + h := colors / 2 + c := HSVA{S: 0.5, V: 1, A: alpha} + ds := 0.5 / float64(h) + for i := range p[:h] { + c.H = float64(start) + p[i] = color.NRGBAModel.Convert(c) + c.H = float64(end) + p[len(p)-1-i] = color.NRGBAModel.Convert(c) + c.S -= ds + } + if colors%2 != 0 { + p[colors/2] = color.NRGBA{0xff, 0xff, 0xff, byte(math.MaxUint8 * alpha)} + } + + return p +} diff --git a/palette/palette_test.go b/palette/palette_test.go new file mode 100644 index 00000000..72bc29e8 --- /dev/null +++ b/palette/palette_test.go @@ -0,0 +1,66 @@ +// Copyright ©2015 The gonum Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Copyright ©2011-2012 The bíogo Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package palette + +import ( + "image/color" + "reflect" + "testing" +) + +func TestRainbow(t *testing.T) { + if !reflect.DeepEqual(Rainbow(10, 0, 1, 1, 1, 1), palette{ + color.NRGBA{R: 0xff, G: 0x00, B: 0x00, A: 0xff}, // "#FF0000FF" + color.NRGBA{R: 0xff, G: 0xaa, B: 0x00, A: 0xff}, // "#FFAA00FF" + color.NRGBA{R: 0xaa, G: 0xff, B: 0x00, A: 0xff}, // "#AAFF00FF" + color.NRGBA{R: 0x00, G: 0xff, B: 0x00, A: 0xff}, // "#00FF00FF" + color.NRGBA{R: 0x00, G: 0xff, B: 0xaa, A: 0xff}, // "#00FFAAFF" + color.NRGBA{R: 0x00, G: 0xaa, B: 0xff, A: 0xff}, // "#00AAFFFF" + color.NRGBA{R: 0x00, G: 0x00, B: 0xff, A: 0xff}, // "#0000FFFF" + color.NRGBA{R: 0xaa, G: 0x00, B: 0xff, A: 0xff}, // "#AA00FFFF" + color.NRGBA{R: 0xff, G: 0x00, B: 0xaa, A: 0xff}, // "#FF00AAFF" + color.NRGBA{R: 0xff, G: 0x00, B: 0x00, A: 0xff}, // "#FF0000FF" + }) { + t.Error("Rainbow does not agree with R rainbow") + } +} + +func TestHeat(t *testing.T) { + if !reflect.DeepEqual(Heat(10, 1), palette{ + color.NRGBA{R: 0xff, G: 0x00, B: 0x00, A: 0xff}, // "#FF0000FF" + color.NRGBA{R: 0xff, G: 0x24, B: 0x00, A: 0xff}, // "#FF2400FF" + color.NRGBA{R: 0xff, G: 0x49, B: 0x00, A: 0xff}, // "#FF4900FF" + color.NRGBA{R: 0xff, G: 0x6d, B: 0x00, A: 0xff}, // "#FF6D00FF" + color.NRGBA{R: 0xff, G: 0x92, B: 0x00, A: 0xff}, // "#FF9200FF" + color.NRGBA{R: 0xff, G: 0xb6, B: 0x00, A: 0xff}, // "#FFB600FF" + color.NRGBA{R: 0xff, G: 0xdb, B: 0x00, A: 0xff}, // "#FFDB00FF" + color.NRGBA{R: 0xff, G: 0xff, B: 0x00, A: 0xff}, // "#FFFF00FF" + color.NRGBA{R: 0xff, G: 0xff, B: 0x3f, A: 0xff}, // "#FFFF40FF" Off by one compared to R. + color.NRGBA{R: 0xff, G: 0xff, B: 0xbF, A: 0xff}, // "#FFFFBFFF" + }) { + t.Error("Heat does not agree with R heat (ish)") + } +} + +func TestRadial(t *testing.T) { + if !reflect.DeepEqual(Radial(10, Cyan, Magenta, 1), palette{ + color.NRGBA{R: 0x7f, G: 0xff, B: 0xff, A: 0xff}, // "#80FFFFFF" Off by one compared to R. + color.NRGBA{R: 0x99, G: 0xff, B: 0xff, A: 0xff}, // "#99FFFFFF" + color.NRGBA{R: 0xb3, G: 0xff, B: 0xff, A: 0xff}, // "#B3FFFFFF" + color.NRGBA{R: 0xcc, G: 0xff, B: 0xff, A: 0xff}, // "#CCFFFFFF" + color.NRGBA{R: 0xe6, G: 0xff, B: 0xff, A: 0xff}, // "#E6FFFFFF" + color.NRGBA{R: 0xff, G: 0xe6, B: 0xff, A: 0xff}, // "#FFE6FFFF" + color.NRGBA{R: 0xff, G: 0xcc, B: 0xff, A: 0xff}, // "#FFCCFFFF" + color.NRGBA{R: 0xff, G: 0xb3, B: 0xff, A: 0xff}, // "#FFB3FFFF" + color.NRGBA{R: 0xff, G: 0x99, B: 0xff, A: 0xff}, // "#FF99FFFF" + color.NRGBA{R: 0xff, G: 0x7f, B: 0xff, A: 0xff}, // "#FF80FFFF" Off by one compared to R. + }) { + t.Error("Radial does not agree with R radial (ish)") + } +}