0

这次是一个问题:)

目前我正在使用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如果不包含正值,则红色反之亦然。

我知道我可以使用vminand设置限制vmax。然而,这并不是我真正想要的。我想在我的函数中包含居中选项,以便颜色图根据以下情况自动正确缩放Data

有任何想法吗?

4

0 回答 0