在python中将整型值映射到颜色的范围

问题描述:

我有从0到10000的整数。我想将颜色映射到每个颜色。然后根据整数值我想检索对应于整数值的颜色的RGB等价物。基本上我想在两种或多种颜色之间有插值效果,例如如果颜色是绿色和红色,那么绿色的重量最轻(0),红色的重量最高(10000)。我该如何使用matplotlib来实现这个映射,或者是否有任何其他类似的库。在python中将整型值映射到颜色的范围

它确实有可能从给定的颜色表样品10000个色:

#!/usr/bin/python3 

from numpy import arange 

from matplotlib import pyplot as plt 
from matplotlib import cm 
from matplotlib.colors import LinearSegmentedColormap 


# ====== 
## data: 

N = 10000 
data = arange(N +1) 


# ================= 
## custom colormap: 

# red-green colormap: 
cdict = {'red': [(0.0, 1.0, 1.0), # red decreases 
        (1.0, 0.0, 0.0)], 

     'green': [(0.0, 0.0, 0.0), # green increases 
        (1.0, 1.0, 1.0)], 

     'blue': [(0.0, 0.0, 0.0), # no blue at all 
        (1.0, 0.0, 0.0)]} 

red_green_cm = LinearSegmentedColormap('RedGreen', cdict, N) 


# ====== 
## plot: 

colors = cm.get_cmap(red_green_cm, N) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

# each line is of its own color: 
for i, x in enumerate(data): 
    ax.plot(data, data*x, color=colors(i)) 

fig.savefig("red-green-cm.png") 

结果:

enter image description here

编辑

你也可以添加一个彩条:

#!/usr/bin/python3 

from numpy import arange 

import matplotlib as mpl 
from matplotlib import pyplot as plt 
from matplotlib import cm 
from matplotlib.colors import LinearSegmentedColormap 


# ====== 
## data: 

N = 10000 
data = arange(N +1) 


# ================= 
## custom colormap: 

# red-green colormap: 
cdict = {'red': [(0.0, 1.0, 1.0), # red decreases 
        (1.0, 0.0, 0.0)], 

     'green': [(0.0, 0.0, 0.0), # green increases 
        (1.0, 1.0, 1.0)], 

     'blue': [(0.0, 0.0, 0.0), # no blue at all 
        (1.0, 0.0, 0.0)] } 

red_green_cm = LinearSegmentedColormap('RedGreen', cdict, N) 


# ====== 
## plot: 

colors = cm.get_cmap(red_green_cm, N) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

# each line is of its own color: 
for i, x in enumerate(data): 
    ax.plot(data, data*x, color=colors(i)) 

# make space for colorbar: 
fig.tight_layout(rect=[0, 0, 0.85, 1]) 

# adding colorbar: 
ax_cb = fig.add_axes([0.85, 0.10, 0.05, 0.8]) 
norm = mpl.colors.Normalize(vmin=data[0], vmax=data[-1]) 
cb = mpl.colorbar.ColorbarBase(ax_cb, cmap=red_green_cm, norm=norm, orientation='vertical') 

fig.savefig("red-green-cm.png") 

enter image description here

+0

@ user929304:请参阅编辑。 – Adobe 2015-10-01 13:08:32

+0

精彩,非常感谢! – 2015-10-01 13:36:17

一个范围在两个极端之间的颜色表称为Diverging,在matplotlib中有一个RdYlGn(红色 - 黄色 - 绿色)颜色贴图,它完全符合您的需求。看看。我不知道范围是0到10,000,尽管它肯定会处理0到100,并且您可以将范围映射到该范围内。

+0

如果数据范围从0到10000,它表明,连续的调色板是比较合适的,虽然很难确切知道不知道更多的关于数据的性质。 – mwaskom 2014-09-04 21:19:23