web-dev-qa-db-fra.com

Couleurs nommées dans matplotlib

Quelles couleurs nommées sont disponibles dans matplotlib pour les parcelles? Je peux trouver une liste dans la documentation de matplotlib qui prétend que ce sont les seuls noms:

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

Cependant, j'ai constaté que ces couleurs peuvent également être utilisées, du moins dans ce contexte:

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

mais ceux-ci ne sont pas sur la liste ci-dessus. Est-ce que quelqu'un connaît une liste exhaustive des couleurs nommées disponibles?

232
T.C. Proctor

J'oublie constamment les noms des couleurs que je veux utiliser et je reviens toujours à cette question =)

Les réponses précédentes sont excellentes, mais je trouve un peu difficile d'obtenir un aperçu des couleurs disponibles à partir de l'image publiée. Je préfère que les couleurs soient regroupées avec des couleurs similaires, j'ai donc légèrement modifié le réponse matplotlib mentionné dans un commentaire ci-dessus pour obtenir une liste de couleurs triée par colonnes. L'ordre n'est pas identique à la façon dont je trierais, mais je pense que cela donne un bon aperçu.

J'ai mis à jour l'image et le code afin de refléter que 'rebeccapurple' a été ajouté et que les trois couleurs sage ont été déplacées sous le préfixe 'xkcd:' depuis que j'ai posté cette réponse à l'origine.

enter image description here

Je n’ai vraiment pas beaucoup changé par rapport à l’exemple de matplotlib, mais voici le code pour l’exhaustivité.

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

Couleurs nommées supplémentaires

Mis à jour le 2017-10-25. J'ai fusionné mes mises à jour précédentes dans cette section.

xkcd

Si vous souhaitez utiliser des couleurs nommées supplémentaires lors du traçage avec matplotlib, vous pouvez utiliser le noms de couleurs crowdsourced xkcd , via le préfixe 'xkcd:':

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

Vous avez maintenant accès à une pléthore de couleurs nommées!

enter image description here

Tableau

Les couleurs par défaut de Tableau sont disponibles dans matplotlib via le préfixe 'tab:'

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

Il y a dix couleurs distinctes:

enter image description here

HTML

Vous pouvez également tracer les couleurs par leur code HTML hexadécimal :

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

Cela ressemble plus à la spécification et au tuple RVB plutôt qu’à une couleur nommée (mis à part le fait que le code hexadécimal est transmis sous forme de chaîne), et je n’incluerai pas l’image des 16 millions de couleurs que vous pouvez choisir ...


Pour plus de détails, veuillez vous référer à la documentation sur les couleurs de matplotlib et au fichier source spécifiant les couleurs disponibles, _color_data.py .


247
joelostblom

Matplotlib utilise un dictionnaire de son module colors.py.

Pour imprimer les noms, utilisez:

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

Ceci est le dictionnaire complet:

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

Vous pourriez les tracer comme ceci:

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

Outre la réponse de BoshWash, voici l'image générée par son code:

Named colors

144
Mathias711

Pour obtenir une liste complète des couleurs à utiliser dans les tracés:

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

Donc, vous pouvez utiliser de cette manière rapidement:

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