Toccata in Nowhere.

Python ColorMap/ScalarMap色条配色方案映射

2020.02.25

通过给定的色彩参数转换成颜色RGBA参数。

库依赖

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cm as cmx

思路步骤

1. 选择色条配色方案

colors_map = plt.get_cmap('seismic')     # 选择色条方案

部分可选方案:

  • perceptual uniform sequential colormaps:感知均匀的序列化 colormap
  • sequential colormaps:序列化(连续化)色图 colormap;
    • gray:0-255 级灰度,0:黑色,1:白色,黑底白字;
    • gray_r:翻转 gray 的显示,如果 gray 将图像显示为黑底白字,gray_r 会将其显示为白底黑字;
    • binary
  • diverging colormaps:两端发散的色图 colormaps;
    • seismic
  • qualitative colormaps:量化(离散化)色图;
  • miscellaneous colormaps:其他色图;
    • rainbow

P.S. 在plt.imshow()时也可选择不同色彩方案: 例如:

plt.imshow(image, cmap=plt.get_cmap('gray_r'))
plt.imshow(image, cmap='gray_r')
plt.imshow(image, cmap=plt.cm.binary)

2. 将参数映射的数值范围归一化,并映射到色条

cNorm = colors.Normalize(vmin=0, vmax=5)    # 选择对应色条的最小值和最大值
scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=colors_map)  

3. 转换对应颜色ScalarMap到RGBA格式

colorVal = scalarMap.to_rgba(i)   # i为参数,在参数列表的范围内
plt.plot(x, y, c = colorVal)

使用例

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cm as cmx

colors_map = plt.get_cmap('seismic')     # 选择色条方案

# e.g. Greys, Blues, jet

cNorm = colors.Normalize(vmin=0, vmax=5)    # 选择对应色条的最小值和最大值

print(cNorm)         # 保存为一个色彩Normalize的d对象

scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=colors_map)  # 映射色彩对应值到具体的色条

print(scalarMap.get_clim())     # 查看色条对应的数值范围

plt.figure()

x = np.arange(10)
y = np.arange(10,20)

for i in range(5):
 colorVal = scalarMap.to_rgba(i)   # 通过参数i将色条里的颜色转换为RGBA格式(红色-绿色-蓝色-透明度
 print(i, colorVal)
 
 plt.plot(x, y + i, c = colorVal)  
 
plt.show()