我试图通过操作this example从matplotlib颜色映射中提取离散颜色。但是,我找不到从colormap中提取的N
离散颜色。
在下面的代码中,我使用了cmap._segmentdata
,但我发现它是整个colormap的定义。给定一个colormap和一个整数N
,如何从colormap中提取N
离散颜色并以十六进制格式导出它们?
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()
通过调用
cmap(i)
,可以为索引为i
的段获取rgba值的元组。已经有一个函数将rgb值转换为十六进制。正如Joe Kington在评论中所写,您可以使用matplotlib.colors.rgb2hex
。因此,一个可能的解决办法是:输出为:
相关问题 更多 >
编程相关推荐