从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议。)