从matplotlib中的颜色映射获取单独的颜色
如果你有一个ColorMap
cmap = matplotlib.cm.get_cmap('Spectral') 如何从0到1之间获得特定的颜色,其中0.0是地图中的第一个颜色,1.0是地图中的最后一个颜色?
理想情况下,我可以通过以下方法获得地图中的中间色:
 >>> do_some_magic(cmap, 0.5) # Return an RGBA tuplet (0.1, 0.2, 0.3, 1.0) 
	
 你可以用下面的代码来做到这一点,你问题中的代码实际上非常接近你所需要的,你所要做的就是调用你所拥有的cmap对象。 
 import matplotlib cmap = matplotlib.cm.get_cmap('Spectral') rgba = cmap(0.5) print(rgba) # (0.99807766255210428, 0.99923106502084169, 0.74602077638401709, 1.0) 
 对于范围[0.0,1.0]以外的值,将分别返回下方和上方的颜色。 这是默认情况下,范围内的最小和最大颜色(如0.0和1.0)。 这个默认值可以通过cmap.set_under()和cmap_set_over()来改变。 
 对于“特殊”数字,例如np.nan和np.inf ,默认是使用0.0值,这可以使用cmap.set_bad()更改,类似于上面和下面的。 
 最后,您可能需要规范化您的数据,使其符合范围[0.0, 1.0] 。 这可以使用matplotlib.colors.Normalize来完成,就像下面的小例子所示,参数vmin和vmax描述了什么数字应该分别映射到0.0和1.0。 
 import matplotlib norm = matplotlib.colors.Normalize(vmin=10.0, vmax=20.0) print(norm(15.0)) # 0.5 
对数归一化器( matplotlib.colors.LogNorm )也可用于具有大量值的数据范围。
(感谢Joe Kington和tcaswell提供的关于如何改进答案的build议。)