从matplotlib中的颜色贴图中获取单个颜色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从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()
更改,类似于上面的under和over。
最后,您可能需要对数据进行标准化,使其符合范围[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提供有关如何改进答案的建议。)
为了获得rgba整数值而不是浮点值,我们可以做到
rgba = cmap(0.5,bytes=True)
因此,为了根据Ffisegydd的答案简化代码,代码将是这样的:
#import colormap
from matplotlib import cm
#normalize item number values to colormap
norm = matplotlib.colors.Normalize(vmin=0, vmax=1000)
#colormap possible values = viridis, jet, spectral
rgba_color = cm.jet(norm(400),bytes=True)
#400 is one of value between 0 and 1000
以上是关于从matplotlib中的颜色贴图中获取单个颜色的主要内容,如果未能解决你的问题,请参考以下文章
Matplotlib 3.3.3:更改单个刻度的颜色不再起作用