将在python中使用matplotlib创建的自定义色彩映射居中

时间:2014-03-30 22:36:31

标签: python matplotlib imshow colormap

这次虽然有问题:)

目前,我正在使用pylab.imshow()和/或pylab.contour()进行大量绘图。为了说明的目的,我包括了彩色地图。但是,我不太喜欢可用的色彩映射。为此,我决定使用以下代码创建一个:

import numpy
import matplotlib as mpl
import matplotlib.pylab as plt

def make_cmap(colors):
    position = numpy.linspace(0,1,len(colors))

    cdict = {'red':[], 'green':[], 'blue':[]}
    for pos, color in zip(position, colors):
        cdict['red'].append((pos, color[0], color[0]))
        cdict['green'].append((pos, color[1], color[1]))
        cdict['blue'].append((pos, color[2], color[2]))

    cmap = mpl.colors.LinearSegmentedColormap('my_colormap', cdict, 256)
    return cmap

colors = [(0, 0, 1), (1, 1, 1), (1, 0, 0)]  #cmap from blue to white to red.

plt.figure()
plt.imshow(Data, cmap = make_cmap(colors))
plt.show()

该功能非常有效。但是,我仍然缺少的是一个集中选项。使用此选项,我想将颜色贴图置于零中心。上面的色彩图从蓝色到红色,中间是白色。

默认情况下,matplotlib将规范化色彩映射,使最大色彩映射值为Data的最大值。但是,如果数据不包含任何负值,我想丢弃我的色彩图的蓝色部分,因为在比较不同的图像时它会非常混乱。如果Data不包含正值,则反之亦然。

我知道我可以使用vminvmax设置限制。但是,这并不是我真正想要的。我想在我的函数中包含居中选项,以便colormap根据Data

自动缩放。

有什么想法吗?

0 个答案:

没有答案