Colori nominati in matplotlib


259

Quali colori con nome sono disponibili in matplotlib per l'uso in grafici? Posso trovare un elenco sulla documentazione di matplotlib che afferma che questi sono gli unici nomi:

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

Tuttavia, ho scoperto che questi colori possono essere utilizzati anche, almeno in questo contesto:

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

ma questi non sono nella lista sopra. Qualcuno conosce un elenco esaustivo dei colori nominati disponibili?


4
Fondamentalmente, sono tutti i nomi dei colori HTML, quindi puoi sempre solo google "colori HTML" se vuoi diversi grafici carini. L'eccellente risposta di @ BoshWash di seguito ti dà l'elenco esatto, però.
Joe Kington,

14
C'è anche questa bella foto su matplotlib.org

Questa è una bella foto, probabilmente avrei dovuto accorgermene. Ad essere sinceri, è stato pubblicato per la prima volta un mese prima di pubblicare questa domanda e sono abbastanza sicuro di aver cercato tra i documenti molte volte prima di allora per trovare la risposta a questa domanda.
TC Proctor,

Risposte:


303

Dimentico costantemente i nomi dei colori che voglio usare e continuo a tornare a questa domanda =)

Le risposte precedenti sono fantastiche, ma trovo un po 'difficile ottenere una panoramica dei colori disponibili dall'immagine pubblicata. Preferisco che i colori siano raggruppati con colori simili, quindi ho leggermente modificato la risposta matplotlib che è stata menzionata in un commento sopra per ottenere un elenco di colori ordinato in colonne. L'ordine non è identico a come ordinerei a occhio, ma penso che fornisca una buona panoramica.

Ho aggiornato l'immagine e il codice per riflettere che è stato aggiunto "rebeccapurple" e che i tre colori prudenti sono stati spostati sotto il prefisso "xkcd:" da quando ho pubblicato questa risposta originariamente.

inserisci qui la descrizione dell'immagine

In realtà non sono cambiato molto dall'esempio matplotlib, ma ecco il codice per completezza.

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()

Altri colori con nome

Aggiornato 25-10-2017. Ho unito i miei aggiornamenti precedenti in questa sezione.

xkcd

Se si desidera utilizzare altri colori con nome durante la stampa con matplotlib, è possibile utilizzare i nomi dei colori crowdsourcing xkcd , tramite il prefisso "xkcd:":

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

Ora hai accesso a una pletora di colori nominati!

inserisci qui la descrizione dell'immagine

quadro

I colori predefiniti del tableau sono disponibili in matplotlib tramite il prefisso "tab:":

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

Esistono dieci colori distinti:

inserisci qui la descrizione dell'immagine

HTML

Puoi anche stampare i colori con il loro codice esadecimale HTML :

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

Questo è più simile alla specifica e alla tupla RGB piuttosto che a un colore con nome (a parte il fatto che il codice esadecimale viene passato come una stringa) e non includerò un'immagine dei 16 milioni di colori che puoi scegliere ...


Per ulteriori informazioni, si prega di fare riferimento alla documentazione colori matplotlib e il file di origine che specifica i colori disponibili, _color_data.py.



Grazie per la trama! Per curiosità, "y" è davvero diverso da "giallo"? La prima trama li ha come colori diversi.
ComputerScientist,

1
@ComputerScientist Sì, in base a questo problema di Github e alla discussione sulla lista di mailling collegata, ai colori a lettera singola sono stati assegnati valori RBG basati sulla loro controparte Matlab, mentre il nome completo corrisponde ai colori HTML. I colori a lettera singola di Matlab attualmente seguono anche lo standard HTML, quindi non sono sicuro che si tratti di una recente modifica di Matlab o se i colori a lettera singola di matplotlib sono stati modificati / scelti per motivi come la visibilità, che è stata anche menzionata nelle discussioni.
Joelostblom,

@AdrianTorrie: potresti assegnare un premio a tua scelta come "Grazie" aggiuntivo! Un premio di bontà mette in evidenza questa risposta e conferisce ai rispondenti punti aggiuntivi.
SherylHohman,

Grazie per tenerlo aggiornato!
JakeCowton,

@joelostblom, nella trama dei colori xkcd, come hai ottenuto i codici esadecimali da visualizzare in grigio, accanto al nome del colore (in nero)?
MMelnicki,

312

Matplotlib utilizza un dizionario dal suo modulo colors.py.

Per stampare i nomi usare:

# 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)

Questo è il dizionario completo:

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'}

Potresti tracciarli in questo modo:

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()

1
Grazie per la risposta, era esattamente quello che stavo cercando. Penso in combinazione con il commento di @Joe Kington, praticamente tutte le basi sono coperte.
TC Proctor

Qui puoi anche trovare i valori RGB: flask.sagenb.org/src/plot/colors.py
pceccon

Se vuoi dare una rapida occhiata all'elenco visivo dei colori con nome online: matplotlib.org/examples/color/named_colors.html
BallpointBen

145

Oltre alla risposta di BoshWash, ecco l'immagine generata dal suo codice:

Colori nominati


10

Per ottenere un elenco completo dei colori da utilizzare nelle trame:

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

Quindi, puoi usare in quel modo rapidamente:

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])

Questo non aggiunge nulla che le risposte precedenti non abbiano.
TC Proctor,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.