这次是一个问题:)
目前我正在使用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
如果不包含正值,则红色反之亦然。
我知道我可以使用vmin
and设置限制vmax
。然而,这并不是我真正想要的。我想在我的函数中包含居中选项,以便颜色图根据以下情况自动正确缩放Data
有任何想法吗?