J'essaie d'extraire des couleurs discrètes d'une palette de couleurs matplotlib en manipulant cet exemple . Cependant, je ne trouve pas les couleurs discrètes N
qui sont extraites de la palette de couleurs.
Dans le code ci-dessous, j'ai utilisé cmap._segmentdata
, mais j'ai trouvé que c'était la définition de la palette de couleurs entière. Étant donné une palette de couleurs et un entier N
, comment extraire N
des couleurs discrètes de la palette de couleurs et les exporter au format hexadécimal?
from pylab import *
delta = 0.01
x = arange(-3.0, 3.0, delta)
y = arange(-3.0, 3.0, delta)
X,Y = meshgrid(x, y)
Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = Z2 - Z1 # difference of Gaussians
cmap = cm.get_cmap('seismic', 5) # PiYG
cmap_colors = cmap._segmentdata
def print_hex(r,b,g):
if not(0 <= r <= 255 or 0 <= b <= 255 or 0 <= g <= 255):
raise ValueError('rgb not in range(256)')
print '#%02x%02x%02x' % (r, b, g)
for i in range(len(cmap_colors['blue'])):
r = int(cmap_colors['red'][i][2]*255)
b = int(cmap_colors['blue'][i][2]*255)
g = int(cmap_colors['green'][i][2]*255)
print_hex(r, g, b)
im = imshow(Z, cmap=cmap, interpolation='bilinear',
vmax=abs(Z).max(), vmin=-abs(Z).max())
axis('off')
colorbar()
show()
Vous pouvez obtenir un Tuple de valeurs rgba pour le segment d'index i
en appelant cmap(i)
. Il existe également déjà une fonction qui transforme les valeurs RVB en hexadécimal. Comme Joe Kington l'a écrit dans les commentaires, vous pouvez utiliser matplotlib.colors.rgb2hex
. Par conséquent, une solution possible serait:
from pylab import *
cmap = cm.get_cmap('seismic', 5) # PiYG
for i in range(cmap.N):
rgb = cmap(i)[:3] # will return rgba, we take only first 3 so we get rgb
print(matplotlib.colors.rgb2hex(rgb))
La sortie est:
#00004c
#0000ff
#ffffff
#ff0000
#7f0000