define - Generando gamas de colores en Python
python color palette (4)
Quiero generar una lista de especificaciones de color en forma de (r, g, b) tuplas, que abarcan todo el espectro de colores con tantas entradas como desee. Así que para 5 entradas me gustaría algo como:
- (0, 0, 1)
- (0, 1, 0)
- (1, 0, 0)
- (1, 0.5, 1)
- (0, 0, 0.5)
Por supuesto, si hay más entradas que la combinación de 0 y 1, debería usar fracciones, etc. ¿Cuál sería la mejor manera de hacer esto?
Las paletas de colores son interesantes. ¿Sabía que el mismo brillo de, digamos, verde, se percibe más intensamente que, digamos, rojo? Eche un vistazo a http://poynton.ca/PDFs/ColorFAQ.pdf . Si desea utilizar paletas preconfiguradas, eche un vistazo a las paletas de caballitos de mar :
import seaborn as sns
palette = sns.color_palette(None, 3)
Genera 3 colores a partir de la paleta actual.
Siguiendo los pasos de kquinn''s y jhrf :)
Para Python 3 se puede hacer de la siguiente manera:
def get_N_HexCol(N=5):
HSV_tuples = [(x * 1.0 / N, 0.5, 0.5) for x in range(N)]
hex_out = []
for rgb in HSV_tuples:
rgb = map(lambda x: int(x * 255), colorsys.hsv_to_rgb(*rgb))
hex_out.append(''#%02x%02x%02x'' % tuple(rgb))
return hex_out
Utilice el espacio de color HSV / HSB / HSL (tres nombres para más o menos lo mismo). Genere n tuplas equitativamente distribuidas en el espacio de matiz, luego simplemente conviértalas a RGB.
Código de muestra:
import colorsys
N = 5
HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in range(N)]
RGB_tuples = map(lambda x: colorsys.hsv_to_rgb(*x), HSV_tuples)
la siguiente función basada en respuesta .
import colorsys
def get_N_HexCol(N=5):
HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in xrange(N)]
hex_out = []
for rgb in HSV_tuples:
rgb = map(lambda x: int(x*255),colorsys.hsv_to_rgb(*rgb))
hex_out.append("".join(map(lambda x: chr(x).encode(''hex''),rgb)))
return hex_out