你可以用下面的代码来实现这一点,你问题中的代码实际上非常接近你所需要的,你所要做的就是调用你拥有的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]范围的值,它将分别返回底色和上色.默认情况下,这是范围内的最小和最大 colored颜色 (SO 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)也可用于具有大范围值的数据范围.
(Thanks to both 100 and 101 for suggestions on how to improve the answer.)