在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")
结果:
编辑
你也可以添加一个彩条:
#!/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")
答
一个范围在两个极端之间的颜色表称为Diverging,在matplotlib中有一个RdYlGn(红色 - 黄色 - 绿色)颜色贴图,它完全符合您的需求。看看。我不知道范围是0到10,000,尽管它肯定会处理0到100,并且您可以将范围映射到该范围内。
+0
如果数据范围从0到10000,它表明,连续的调色板是比较合适的,虽然很难确切知道不知道更多的关于数据的性质。 – mwaskom 2014-09-04 21:19:23
@ user929304:请参阅编辑。 – Adobe 2015-10-01 13:08:32
精彩,非常感谢! – 2015-10-01 13:36:17