从matplotlib中的RGBA函数创建一个颜色条

时间:2012-10-22 15:51:45

标签: python matplotlib

我正在通过imshow绘制一个图像,输入MxNx4数组A,这是为矩形MxN网格定义的RGBA数组。此着色是从V生成的,这是一个MxN数组,表示这些点中每一个的标量值。即我有一个函数f,它接受​​一个标量值并返回一个RGBA元组:f(V) = A

我想制作一个颜色条,作为输入f,V。这可能吗?

1 个答案:

答案 0 :(得分:4)

要创建颜色贴图,您必须指定红色/绿色/蓝色组件在线性刻度上的变化方式。看起来您已经有了一个函数f,它可以为您设置r / g / b组件。困难的部分是第4通道,alpha通道。给定由f指定的RGB颜色映射,我将设置alpha通道。

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

# some data
a = np.sort(np.random.randn(10, 10))

# use the default 'jet' colour map for showing the difference later
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.imshow(a, cmap=cm.get_cmap('jet'))
fig.savefig('map1.png')

# let's use jet and modify the alpha channel
# you would use your own colour map specified by f
my_cmap = cm.get_cmap('jet')

# this is a hack to get at the _lut array, which stores RGBA vals
my_cmap._init()

# use some made-up alphas, you would use the ones specified by f
alphas = np.abs(np.linspace(-1.0, 1.0, my_cmap.N))

# overwrite the alpha channel of the jet colour map
my_cmap._lut[:-3,-1] = alphas

# plot data with our modified colour map
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.imshow(a, cmap=my_cmap)
fig.savefig('map2.png')

这是map1.png

map1

这里是map2.png

map2

希望这有帮助。