Nazwane kolory w matplotlib

259

Jakie nazwane kolory są dostępne w Matplotlib do użytku na wykresach? Mogę znaleźć listę w dokumentacji matplotlib, która twierdzi, że są to jedyne nazwy:

b: blue
g: green
r: red
c: cyan
m: magenta
y: yellow
k: black
w: white

Przekonałem się jednak, że można również użyć tych kolorów, przynajmniej w tym kontekście:

scatter(X,Y, color='red')
scatter(X,Y, color='orange')
scatter(X,Y, color='darkgreen')

ale nie ma ich na powyższej liście. Czy ktoś zna wyczerpującą listę nazwanych kolorów, które są dostępne?

TC Proctor
źródło
4
Zasadniczo są to wszystkie nazwy kolorów HTML, więc zawsze możesz po prostu „Google kolory HTML”, jeśli chcesz kilka fajnych wykresów. Doskonała odpowiedź @ BoshWash poniżej podaje dokładną listę.
Joe Kington
14
Jest też to ładne zdjęcie na matplotlib.org
To ładne zdjęcie, prawdopodobnie powinienem je zauważyć. Aby być uczciwym, został opublikowany po raz pierwszy na miesiąc przed opublikowaniem tego pytania i jestem prawie pewien, że wielokrotnie przeszukiwałem dokumenty w celu uzyskania odpowiedzi na to pytanie.
TC Proctor

Odpowiedzi:

303

Ciągle zapominam nazwy kolorów, których chcę używać i wracam do tego pytania =)

Poprzednie odpowiedzi są świetne, ale trudno mi uzyskać przegląd dostępnych kolorów z opublikowanego obrazu. Wolę pogrupować kolory z podobnymi kolorami, więc nieznacznie poprawiłem odpowiedź matplotlib , o której wspomniano w powyższym komentarzu, aby posortować listę kolorów w kolumnach. Kolejność nie jest identyczna z tym, jak sortowałbym według wzroku, ale myślę, że daje dobry przegląd.

Zaktualizowałem obraz i kod, aby odzwierciedlić, że dodano „rebeccapurple”, a trzy kolory szałwii zostały przeniesione pod prefiksem „xkcd:”, odkąd pierwotnie opublikowałem tę odpowiedź.

wprowadź opis zdjęcia tutaj

Naprawdę niewiele zmieniłem z przykładu matplotlib, ale oto kod kompletności.

import matplotlib.pyplot as plt
from matplotlib import colors as mcolors


colors = dict(mcolors.BASE_COLORS, **mcolors.CSS4_COLORS)

# Sort colors by hue, saturation, value and name.
by_hsv = sorted((tuple(mcolors.rgb_to_hsv(mcolors.to_rgba(color)[:3])), name)
                for name, color in colors.items())
sorted_names = [name for hsv, name in by_hsv]

n = len(sorted_names)
ncols = 4
nrows = n // ncols

fig, ax = plt.subplots(figsize=(12, 10))

# Get height and width
X, Y = fig.get_dpi() * fig.get_size_inches()
h = Y / (nrows + 1)
w = X / ncols

for i, name in enumerate(sorted_names):
    row = i % nrows
    col = i // nrows
    y = Y - (row * h) - h

    xi_line = w * (col + 0.05)
    xf_line = w * (col + 0.25)
    xi_text = w * (col + 0.3)

    ax.text(xi_text, y, name, fontsize=(h * 0.8),
            horizontalalignment='left',
            verticalalignment='center')

    ax.hlines(y + h * 0.1, xi_line, xf_line,
              color=colors[name], linewidth=(h * 0.8))

ax.set_xlim(0, X)
ax.set_ylim(0, Y)
ax.set_axis_off()

fig.subplots_adjust(left=0, right=1,
                    top=1, bottom=0,
                    hspace=0, wspace=0)
plt.show()

Dodatkowe nazwane kolory

Zaktualizowano 25.10.2017. Połączyłem moje poprzednie aktualizacje w tej sekcji.

xkcd

Jeśli chcesz używać dodatkowych nazwanych kolorów podczas drukowania z matplotlib, możesz użyć nazw kolorów crowdsourcingowych xkcd, używając przedrostka „xkcd:”:

plt.plot([1,2], lw=4, c='xkcd:baby poop green')

Teraz masz dostęp do wielu nazwanych kolorów!

wprowadź opis zdjęcia tutaj

Żywy obraz

Domyślne kolory Tableau są dostępne w matplotlib poprzez prefiks „tab:”:

plt.plot([1,2], lw=4, c='tab:green')

Istnieje dziesięć różnych kolorów:

wprowadź opis zdjęcia tutaj

HTML

Możesz także drukować kolory według ich heksadecymalnego kodu HTML :

plt.plot([1,2], lw=4, c='#8f9805')

Jest to bardziej podobne do określania i krotki RGB niż nazwanego koloru (oprócz faktu, że kod szesnastkowy jest przekazywany jako ciąg znaków) i nie dołączę obrazu 16 milionów kolorów, które możesz wybrać ...


Aby uzyskać więcej informacji, należy zapoznać się z dokumentacją kolorach matplotlib i pliku źródłowego określające dostępne kolory _color_data.py.


joelostblom
źródło
Dzięki za fabułę! Z ciekawości, czy „y” naprawdę różni się od „żółtego”? Pierwsza fabuła ma je w różnych kolorach.
ComputerScientist
1
@ComputerScientist Tak, zgodnie z tym problemem Github i połączoną dyskusją na liście maillingów, jednoliterowym kolorom przypisano wartości RBG na podstawie ich odpowiednika Matlab, a pełna nazwa odpowiada kolorom HTML. Kolory pojedynczej litery Matlab są obecnie zgodne ze standardem HTML, więc nie jestem pewien, czy jest to ostatnia zmiana Matlab, czy też kolory pojedynczej litery Matplotlib zostały poprawione / wybrane z takich powodów, jak widoczność, o czym również wspomniano w dyskusjach.
joelostblom
@AdrianTorrie: możesz przyznać nagrodę według własnego uznania jako dodatkowe „Dzięki”! Nagroda za nagrodę wyróżnia tę odpowiedź i daje autorowi dodatkowe punkty.
SherylHohman,
Dziękujemy za aktualizację!
RockJake28,
@joelostblom, na wykresie kolorów xkcd, w jaki sposób kody szesnastkowe wyświetlały się w kolorze szarym obok nazwy koloru (w kolorze czarnym)?
MMelnicki
312

Matplotlib używa słownika z modułu colors.py.

Aby wydrukować nazwy, użyj:

# python2:

import matplotlib
for name, hex in matplotlib.colors.cnames.iteritems():
    print(name, hex)

# python3:

import matplotlib
for name, hex in matplotlib.colors.cnames.items():
    print(name, hex)

Oto kompletny słownik:

cnames = {
'aliceblue':            '#F0F8FF',
'antiquewhite':         '#FAEBD7',
'aqua':                 '#00FFFF',
'aquamarine':           '#7FFFD4',
'azure':                '#F0FFFF',
'beige':                '#F5F5DC',
'bisque':               '#FFE4C4',
'black':                '#000000',
'blanchedalmond':       '#FFEBCD',
'blue':                 '#0000FF',
'blueviolet':           '#8A2BE2',
'brown':                '#A52A2A',
'burlywood':            '#DEB887',
'cadetblue':            '#5F9EA0',
'chartreuse':           '#7FFF00',
'chocolate':            '#D2691E',
'coral':                '#FF7F50',
'cornflowerblue':       '#6495ED',
'cornsilk':             '#FFF8DC',
'crimson':              '#DC143C',
'cyan':                 '#00FFFF',
'darkblue':             '#00008B',
'darkcyan':             '#008B8B',
'darkgoldenrod':        '#B8860B',
'darkgray':             '#A9A9A9',
'darkgreen':            '#006400',
'darkkhaki':            '#BDB76B',
'darkmagenta':          '#8B008B',
'darkolivegreen':       '#556B2F',
'darkorange':           '#FF8C00',
'darkorchid':           '#9932CC',
'darkred':              '#8B0000',
'darksalmon':           '#E9967A',
'darkseagreen':         '#8FBC8F',
'darkslateblue':        '#483D8B',
'darkslategray':        '#2F4F4F',
'darkturquoise':        '#00CED1',
'darkviolet':           '#9400D3',
'deeppink':             '#FF1493',
'deepskyblue':          '#00BFFF',
'dimgray':              '#696969',
'dodgerblue':           '#1E90FF',
'firebrick':            '#B22222',
'floralwhite':          '#FFFAF0',
'forestgreen':          '#228B22',
'fuchsia':              '#FF00FF',
'gainsboro':            '#DCDCDC',
'ghostwhite':           '#F8F8FF',
'gold':                 '#FFD700',
'goldenrod':            '#DAA520',
'gray':                 '#808080',
'green':                '#008000',
'greenyellow':          '#ADFF2F',
'honeydew':             '#F0FFF0',
'hotpink':              '#FF69B4',
'indianred':            '#CD5C5C',
'indigo':               '#4B0082',
'ivory':                '#FFFFF0',
'khaki':                '#F0E68C',
'lavender':             '#E6E6FA',
'lavenderblush':        '#FFF0F5',
'lawngreen':            '#7CFC00',
'lemonchiffon':         '#FFFACD',
'lightblue':            '#ADD8E6',
'lightcoral':           '#F08080',
'lightcyan':            '#E0FFFF',
'lightgoldenrodyellow': '#FAFAD2',
'lightgreen':           '#90EE90',
'lightgray':            '#D3D3D3',
'lightpink':            '#FFB6C1',
'lightsalmon':          '#FFA07A',
'lightseagreen':        '#20B2AA',
'lightskyblue':         '#87CEFA',
'lightslategray':       '#778899',
'lightsteelblue':       '#B0C4DE',
'lightyellow':          '#FFFFE0',
'lime':                 '#00FF00',
'limegreen':            '#32CD32',
'linen':                '#FAF0E6',
'magenta':              '#FF00FF',
'maroon':               '#800000',
'mediumaquamarine':     '#66CDAA',
'mediumblue':           '#0000CD',
'mediumorchid':         '#BA55D3',
'mediumpurple':         '#9370DB',
'mediumseagreen':       '#3CB371',
'mediumslateblue':      '#7B68EE',
'mediumspringgreen':    '#00FA9A',
'mediumturquoise':      '#48D1CC',
'mediumvioletred':      '#C71585',
'midnightblue':         '#191970',
'mintcream':            '#F5FFFA',
'mistyrose':            '#FFE4E1',
'moccasin':             '#FFE4B5',
'navajowhite':          '#FFDEAD',
'navy':                 '#000080',
'oldlace':              '#FDF5E6',
'olive':                '#808000',
'olivedrab':            '#6B8E23',
'orange':               '#FFA500',
'orangered':            '#FF4500',
'orchid':               '#DA70D6',
'palegoldenrod':        '#EEE8AA',
'palegreen':            '#98FB98',
'paleturquoise':        '#AFEEEE',
'palevioletred':        '#DB7093',
'papayawhip':           '#FFEFD5',
'peachpuff':            '#FFDAB9',
'peru':                 '#CD853F',
'pink':                 '#FFC0CB',
'plum':                 '#DDA0DD',
'powderblue':           '#B0E0E6',
'purple':               '#800080',
'red':                  '#FF0000',
'rosybrown':            '#BC8F8F',
'royalblue':            '#4169E1',
'saddlebrown':          '#8B4513',
'salmon':               '#FA8072',
'sandybrown':           '#FAA460',
'seagreen':             '#2E8B57',
'seashell':             '#FFF5EE',
'sienna':               '#A0522D',
'silver':               '#C0C0C0',
'skyblue':              '#87CEEB',
'slateblue':            '#6A5ACD',
'slategray':            '#708090',
'snow':                 '#FFFAFA',
'springgreen':          '#00FF7F',
'steelblue':            '#4682B4',
'tan':                  '#D2B48C',
'teal':                 '#008080',
'thistle':              '#D8BFD8',
'tomato':               '#FF6347',
'turquoise':            '#40E0D0',
'violet':               '#EE82EE',
'wheat':                '#F5DEB3',
'white':                '#FFFFFF',
'whitesmoke':           '#F5F5F5',
'yellow':               '#FFFF00',
'yellowgreen':          '#9ACD32'}

Możesz wykreślić je w następujący sposób:

import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.colors as colors
import math


fig = plt.figure()
ax = fig.add_subplot(111)

ratio = 1.0 / 3.0
count = math.ceil(math.sqrt(len(colors.cnames)))
x_count = count * ratio
y_count = count / ratio
x = 0
y = 0
w = 1 / x_count
h = 1 / y_count

for c in colors.cnames:
    pos = (x / x_count, y / y_count)
    ax.add_patch(patches.Rectangle(pos, w, h, color=c))
    ax.annotate(c, xy=pos)
    if y >= y_count-1:
        x += 1
        y = 0
    else:
        y += 1

plt.show()
BoshWash
źródło
1
Dzięki za odpowiedź, właśnie tego szukałem. Myślę, że w połączeniu z komentarzem @Joe Kingtona omówione są prawie wszystkie podstawy.
TC Proctor
Tutaj możesz także znaleźć wartości RGB: flask.sagenb.org/src/plot/colors.py
pceccon
Jeśli chcesz rzucić
BallpointBen
145

Oprócz odpowiedzi BoshWash, oto zdjęcie wygenerowane przez jego kod:

Nazwane kolory

Mathias711
źródło
10

Aby uzyskać pełną listę kolorów do wykorzystania na wykresach:

import matplotlib.colors as colors
colors_list = list(colors._colors_full_map.values())

Dzięki temu możesz szybko wykorzystać w ten sposób:

scatter(X,Y, color=colors_list[0])
scatter(X,Y, color=colors_list[1])
scatter(X,Y, color=colors_list[2])
...
scatter(X,Y, color=colors_list[-1])
jnfran92
źródło
Nie dodaje to niczego, czego nie ma poprzednie odpowiedzi.
TC Proctor