<p>您可以使用下面的代码来实现这一点,您问题中的代码实际上非常接近您所需要的,您所要做的就是调用您拥有的<code>cmap</code>对象</p>
<pre><code>import matplotlib
cmap = matplotlib.cm.get_cmap('Spectral')
rgba = cmap(0.5)
print(rgba) # (0.99807766255210428, 0.99923106502084169, 0.74602077638401709, 1.0)
</code></pre>
<p>对于超出范围[0.0,1.0]的值,它将返回“低于”和“高于”颜色(分别)。默认情况下,这是该范围内的最小和最大颜色(so 0.0和1.0)。可以使用<code>cmap.set_under()</code>和<code>cmap.set_over()</code>更改此默认值</p>
<p>对于<code>np.nan</code>和<code>np.inf</code>等“特殊”数字,默认值是使用0.0值,可以使用<code>cmap.set_bad()</code>进行更改,类似于上面的“在下”和“在上”</p>
<p>最后,您可能需要规范化数据,使其符合范围<code>[0.0, 1.0]</code>。这可以使用<a href="http://matplotlib.org/api/colors_api.html#matplotlib.colors.Normalize" rel="noreferrer">^{<cd8>}</a>简单地完成,如下面的小示例所示,其中参数<code>vmin</code>和<code>vmax</code>分别描述应该映射到0.0和1.0的数字</p>
<pre><code>import matplotlib
norm = matplotlib.colors.Normalize(vmin=10.0, vmax=20.0)
print(norm(15.0)) # 0.5
</code></pre>
<p>对数归一化器(<a href="http://matplotlib.org/api/colors_api.html#matplotlib.colors.LogNorm" rel="noreferrer">matplotlib.colors.LogNorm</a>)也可用于具有大范围值的数据范围</p>
<p><em>(感谢<a href="https://stackoverflow.com/users/325565/joe-kington">Joe Kington</a>和<a href="https://stackoverflow.com/users/380231/tcaswell">tcaswell</a>对如何改进答案的建议。)</em></p>