Couleurs nommées dans matplotlib

259

Quelles couleurs nommées sont disponibles dans matplotlib pour une utilisation dans les parcelles? Je peux trouver une liste sur 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 trouvé que ces couleurs peuvent également être utilisées, au moins dans ce contexte:

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

mais ceux-ci ne figurent pas sur la liste ci-dessus. Quelqu'un connaît-il une liste exhaustive des couleurs nommées disponibles?

TC Proctor
la source
4
Fondamentalement, ce sont tous les noms de couleurs HTML, donc vous pouvez toujours simplement google "couleurs HTML" si vous voulez plusieurs beaux graphiques. L'excellente réponse de @ BoshWash ci-dessous vous donne cependant la liste exacte.
Joe Kington
14
Il y a aussi cette jolie photo sur matplotlib.org
C'est une belle photo, j'aurais probablement dû la remarquer. Pour être honnête, elle a été publiée pour la première fois un mois avant que je ne pose cette question, et je suis presque sûr d'avoir cherché dans les documents plusieurs fois avant la réponse à cette question.
TC Proctor

Réponses:

303

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é la réponse matplotlib mentionnée dans un commentaire ci-dessus pour obtenir une liste de couleurs triée en colonnes. L'ordre n'est pas identique à la façon dont je trierais à l'œil nu, mais je pense qu'il donne un bon aperçu.

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

entrez la description de l'image ici

Je n'ai vraiment pas beaucoup changé par rapport à l'exemple de matplotlib, mais voici le code pour être complet.

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 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 les noms de couleurs crowdsourced xkcd , via le préfixe 'xkcd:':

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

Maintenant, vous avez accès à une pléthore de couleurs nommées!

entrez la description de l'image ici

Tableau

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

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

Il existe dix couleurs distinctes:

entrez la description de l'image ici

HTML

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

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 (à part le fait que le code hexadécimal est transmis sous forme de chaîne), et je n'inclurai pas une image des 16 millions de couleurs parmi lesquelles vous pouvez choisir ...


Pour plus de détails, s'il vous plaît se référer à la documentation des couleurs matplotlib et le fichier source spécifiant les couleurs disponibles, _color_data.py.


joelostblom
la source
Merci pour l'intrigue! Par curiosité, le «y» est-il vraiment différent du «jaune»? Le premier tracé les présente sous différentes couleurs.
ComputerScientist
1
@ComputerScientist Oui, selon ce problème Github et la discussion de la liste de distribution liée, les couleurs à lettre unique ont reçu des valeurs RBG en fonction de leur homologue Matlab, tandis que le nom complet correspond aux couleurs HTML. Les couleurs à une lettre de Matlab suivent actuellement également la norme HTML, donc je ne suis pas sûr que ce soit un changement récent de Matlab ou si les couleurs à une lettre de Matplotlib ont été modifiées / choisies pour des raisons telles que la visibilité, qui a également été mentionnée dans les discussions.
joelostblom
@AdrianTorrie: vous pourriez attribuer une prime de votre choix en guise de remerciement supplémentaire! Un prix de prime surligne cette réponse et donne des points supplémentaires au répondeur.
SherylHohman
Merci de l'avoir mis à jour!
JakeCowton
@joelostblom, dans l'intrigue des couleurs xkcd, comment avez-vous fait afficher les codes hexadécimaux en gris, à côté du nom de la couleur (en noir)?
MMelnicki
312

Matplotlib utilise un dictionnaire de son module colours.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)

Voici 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 pouvez 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()
BoshWash
la source
1
Merci pour la réponse, c'est exactement ce que je cherchais. Je pense qu'en combinaison avec le commentaire de @Joe Kington, presque toutes les bases sont couvertes.
TC Proctor
Ici, vous pouvez également trouver les valeurs RVB: flask.sagenb.org/src/plot/colors.py
pceccon
Si vous voulez un aperçu rapide de la liste visuelle des couleurs nommées en ligne: matplotlib.org/examples/color/named_colors.html
BallpointBen
145

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

Couleurs nommées

Mathias711
la source
10

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

Ainsi, 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])
jnfran92
la source
Cela n'ajoute rien que les réponses précédentes n'ont pas.
TC Proctor