从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.nannp.inf ,默认是使用0.0值,这可以使用cmap.set_bad()更改,类似于上面和下面的。

最后,您可能需要规范化您的数据,使其符合范围[0.0, 1.0] 。 这可以使用matplotlib.colors.Normalize来完成,就像下面的小例子所示,参数vminvmax描述了什么数字应该分别映射到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议。)