Colores nombrados en matplotlib

259

¿Qué colores con nombre están disponibles en matplotlib para usar en parcelas? Puedo encontrar una lista en la documentación de matplotlib que afirma que estos son los únicos nombres:

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

Sin embargo, descubrí que estos colores también se pueden usar, al menos en este contexto:

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

pero estos no están en la lista anterior. ¿Alguien sabe una lista exhaustiva de los colores con nombre que están disponibles?

TC Proctor
fuente
44
Básicamente, son todos los nombres de colores HTML, por lo que siempre puedes buscar en Google "colores HTML" si quieres varios gráficos bonitos. Sin embargo, la excelente respuesta de @ BoshWash a continuación le brinda la lista exacta.
Joe Kington
14
También hay esta bonita foto en matplotlib.org
Esa es una buena foto, probablemente debería haberlo notado. Para ser justos, se publicó por primera vez un mes antes de publicar esta pregunta, y estoy bastante seguro de que busqué en los documentos muchas veces antes de encontrar la respuesta a esta pregunta.
TC Proctor

Respuestas:

303

Constantemente olvido los nombres de los colores que quiero usar y sigo volviendo a esta pregunta =)

Las respuestas anteriores son geniales, pero me resulta un poco difícil obtener una visión general de los colores disponibles de la imagen publicada. Prefiero que los colores se agrupen con colores similares, por lo que modifiqué ligeramente la respuesta matplotlib que se mencionó en un comentario anterior para obtener una lista de colores ordenada en columnas. El orden no es idéntico a cómo ordenaría por ojo, pero creo que ofrece una buena visión general.

Actualicé la imagen y el código para reflejar que se ha agregado 'rebeccapurple' y los tres colores sabios se han movido bajo el prefijo 'xkcd:' desde que publiqué esta respuesta originalmente.

ingrese la descripción de la imagen aquí

Realmente no cambié mucho del ejemplo matplotlib, pero aquí está el código para completar.

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

Colores nombrados adicionales

Actualizado el 25-10-2017. Fusioné mis actualizaciones anteriores en esta sección.

xkcd

Si desea usar colores con nombre adicionales al trazar con matplotlib, puede usar los nombres de color de xkcd crowdsourced , a través del prefijo 'xkcd:':

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

¡Ahora tienes acceso a una gran cantidad de colores con nombre!

ingrese la descripción de la imagen aquí

Cuadro

Los colores predeterminados de Tableau están disponibles en matplotlib a través del prefijo 'tab:':

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

Hay diez colores distintos:

ingrese la descripción de la imagen aquí

HTML

También puede trazar colores por su código hexadecimal HTML :

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

Esto es más similar a la especificación y la tupla RGB en lugar de un color con nombre (aparte del hecho de que el código hexadecimal se pasa como una cadena), y no incluiré una imagen de los 16 millones de colores que puede elegir ...


Para más detalles, consulte la documentación de colores matplotlib y el archivo de origen especificando los colores disponibles, _color_data.py.


joelostblom
fuente
Gracias por la trama! Por curiosidad, ¿es 'y' realmente diferente de 'amarillo'? La primera trama los tiene como colores diferentes.
ComputerScientist
1
@ComputerScientist Sí, de acuerdo con este tema de Github y la discusión de la lista de distribución vinculada, a los colores de letras individuales se les asignaron valores RBG basados ​​en su contraparte de Matlab, mientras que el nombre completo corresponde a los colores HTML. Los colores de letra única de Matlab actualmente también siguen el estándar HTML, por lo que no estoy seguro de si se trata de un cambio reciente de Matlab o si los colores de letra única de matplotlib se modificaron / eligieron por razones como la visibilidad, que también se mencionó en las discusiones.
joelostblom
@AdrianTorrie: ¡podría otorgar una recompensa de su elección como un 'Gracias' adicional! Un premio de recompensa resalta esta respuesta y le da puntos adicionales al que responde.
SherylHohman
¡Gracias por mantener esto actualizado!
JakeCowton
@joelostblom, en la gráfica de los colores xkcd, ¿cómo conseguiste que los códigos hexadecimales se mostraran en gris, junto al nombre del color (en negro)?
MMelnicki
312

Matplotlib usa un diccionario de su módulo colors.py.

Para imprimir los nombres use:

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

Este es el diccionario 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'}

Podrías trazarlos así:

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
fuente
1
Gracias por la respuesta, eso era exactamente lo que estaba buscando. Creo que, en combinación con el comentario de @Joe Kington, casi todas las bases están cubiertas.
TC Proctor
Aquí también puede encontrar los valores RGB: flask.sagenb.org/src/plot/colors.py
pceccon
Si desea un vistazo rápido a la lista visual de colores con nombre en línea: matplotlib.org/examples/color/named_colors.html
BallpointBen
145

Además de la respuesta de BoshWash, aquí está la imagen generada por su código:

Colores nombrados

Mathias711
fuente
10

Para obtener una lista completa de colores para usar en diagramas:

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

Entonces, puede usar de esa manera rápidamente:

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
fuente
Esto no agrega nada que las respuestas anteriores no tengan.
TC Proctor