Colores con nombre en matplotlib

10 minutos de lectura

avatar de usuario
Supervisor de TC

¿Qué colores con nombre están disponibles en matplotlib para usar en gráficos? 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?

  • Básicamente, son todos los nombres de colores HTML, por lo que siempre puede buscar en Google “colores HTML” si desea varios gráficos agradables. Sin embargo, la excelente respuesta de @BoshWash a continuación le brinda la lista exacta.

    –Joe Kington

    14/03/2014 a las 15:26


  • También hay esta bonita foto en matplotlib.org

    usuario2379410

    9 mayo 2015 a las 10:41

  • Esa es una buena foto, probablemente debería haberla 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 la respuesta a esta pregunta.

    – Supervisor de TC

    5 de febrero de 2016 a las 14:51

avatar de usuario
joseblom

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

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

Actualicé la imagen y el código para reflejar que se agregó ‘rebeccapurple’ y los tres colores salvia se movieron bajo el prefijo ‘xkcd:’ desde que publiqué esta respuesta originalmente.

ingrese la descripción de la imagen aquí

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

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 con nombre adicionales

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

xkcd

Si desea utilizar colores con nombre adicionales al trazar con matplotlib, puede utilizar el xkcd nombres de colores de colaboración colectivaa través del prefijo ‘xkcd:’:

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

¡Ahora tienes acceso a una plétora 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 especificar una 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 entre los que puede elegir…


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


  • ¡Gracias por la trama! Por curiosidad, ¿’y’ es realmente diferente de ‘amarillo’? La primera trama los tiene de diferentes colores.

    – Científico de la computación

    26 de julio de 2016 a las 14:01


  • @ComputerScientist Sí, según este problema de Github y la discusión de la lista de correo vinculada, a los colores de una sola letra se les asignaron valores RBG en función de su contraparte de Matlab, mientras que el nombre completo corresponde a los colores HTML. Los colores de una sola letra 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 una sola letra de matplotlib se modificaron/seleccionaron por razones como la visibilidad, que también se mencionó en las discusiones.

    – joelostblom

    1 de agosto de 2016 a las 23:12


  • @AdrianTorrie: ¡podría otorgar una recompensa de su propia elección como un ‘Gracias’ adicional! Un premio de recompensa resalta mucho esta respuesta y otorga puntos adicionales al que responde.

    – SherylHohman

    18/06/2017 a las 22:35


  • ¡Gracias por mantener esto actualizado!

    – Jake Cowton

    11 de septiembre de 2017 a las 14:16

  • @joelostblom, en la trama de los colores xkcd, ¿cómo consiguió que los códigos hexadecimales se mostraran en gris, junto al nombre del color (en negro)?

    – MMelnicki

    25 de abril de 2019 a las 18:24

avatar de usuario
BoshWash

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

  • 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.

    – Supervisor de TC

    14/03/2014 a las 17:55

  • Si desea echar un vistazo rápido a la lista visual de colores con nombre en línea: matplotlib.org/examples/color/named_colors.html

    – BolígrafoBen

    21 de marzo de 2018 a las 22:37

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

colores con nombre

Para obtener una lista completa de colores para usar en gráficos:

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

Entonces, puedes 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])

avatar de usuario
Mahmoud A Zaher

Puede usar este diccionario que tiene la mayoría de los colores. z = { ‘Negro’: (0,0,0), ‘Blanco’: (255,255,255), ‘Rojo’: (255,0,0), ‘Lima’: (0,255,0), ‘Azul’: ( 0,0,255), ‘Amarillo’: (255,255,0), ‘Cian’: (0,255,255), ‘Fucsia’: (255,0,255), ‘Plata’: (192,192,192), ‘Gris’: (128,128,128), ‘ Maroon’ : (128,0,0), ‘Olive’ : (128,128,0), ‘Green’ : (0,128,0), ‘Purple’: (128,0,128), ‘Teal’ : (0,128,128), ‘ Armada’ : (0,0,128) }

  • Bienvenido a Stack Overflow. El código es mucho más útil cuando va acompañado de una explicación. Stack Overflow se trata de aprender, no de proporcionar fragmentos para copiar y pegar a ciegas. Edite su pregunta y explique cómo responde a la pregunta específica que se le hace. Consulte Cómo responder.

    – Chris

    13 de marzo a las 23:21

  • Bienvenido a Stack Overflow. El código es mucho más útil cuando va acompañado de una explicación. Stack Overflow se trata de aprender, no de proporcionar fragmentos para copiar y pegar a ciegas. Edite su pregunta y explique cómo responde a la pregunta específica que se le hace. Consulte Cómo responder.

    – Chris

    13 de marzo a las 23:21

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad