python - examples - Colores con nombre en matplotlib
plt python color (4)
¿Qué colores con nombre están disponibles en matplotlib para su uso 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?
Además de la respuesta de BoshWash, aquí está la imagen generada por su código:
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()
Me olvido constantemente de 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 ordenados en columnas. El orden no es idéntico a cómo ordenaría por ojo, pero creo que da una buena visión general.
Actualicé la imagen y el código para reflejar que ''rebeccapurple'' se ha agregado y los tres colores sabios se han movido bajo el prefijo ''xkcd:'' desde que publiqué esta respuesta originalmente.
Realmente no cambié mucho del ejemplo de matplotlib, pero aquí está el código de compleción.
"""
Visualization of named colors.
Simple plot example with the named colors and its visual representation.
"""
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import six
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import colors
# Reverse this if condition to print only the xkcd and tableau colors
colors_ = [color for color in list(six.iteritems(colors.cnames)) if not '':'' in color]
# Add the single letter colors.
for name, rgb in six.iteritems(colors.ColorConverter.colors):
if len(name) == 1:
hex_ = colors.rgb2hex(rgb)
colors_.append((name, hex_))
# Transform to hex color values.
hex_ = [color[1] for color in colors_]
# Get the rgb equivalent.
rgb = [colors.hex2color(color) for color in hex_]
# Get the hsv equivalent.
hsv = [colors.rgb_to_hsv(color) for color in rgb]
# Split the hsv values to sort.
hue = [color[0] for color in hsv]
sat = [color[1] for color in hsv]
val = [color[2] for color in hsv]
# Sort by hue, saturation and value.
ind = np.lexsort((val, sat, hue))
sorted_colors = [colors_[i] for i in ind]
n = len(sorted_colors)
ncols = 4
nrows = int(np.ceil(1. * n / ncols))
fig, ax = plt.subplots(1, figsize=(16,16))
X, Y = fig.get_dpi() * fig.get_size_inches()
# row height
h = Y / (nrows + 1)
# col width
w = X / ncols
for i, (name, color) in enumerate(sorted_colors):
col = int(i / nrows)
row = i % nrows
y = Y - (row * h) - h
xi_line = w * (col + 0.05)
xf_line = w * (col + 0.3)
xi_text = w * (col + 0.35)
ax.text(xi_text, y, name, fontsize=(h * 0.47),
horizontalalignment=''left'',
verticalalignment=''center'')
# Add extra white line between colors
ax.hlines(y + h * 0.1, xi_line, xf_line, color=color, linewidth=(h * 0.6))
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 adicional
Actualizado 2017-10-25. Combiné mis actualizaciones anteriores en esta sección.
xkcd
Si desea utilizar colores con nombre adicionales al trazar con matplotlib, puede utilizar los nombres de color crowdsourcing xkcd , a través del prefijo ''xkcd:'':
plt.plot([1,2], lw=4, c=''xkcd:baby poop green'')
¡Ahora tiene acceso a una plétora de colores con nombre!
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:
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 obtener más información, consulte la documentación de matplotlib colors y el archivo de origen que especifica los colores disponibles, _color_data.py
.
Para obtener una lista completa de los colores para usar en las parcelas:
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])