这次虽然有问题:)
目前,我正在使用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
和vmax
设置限制。但是,这并不是我真正想要的。我想在我的函数中包含居中选项,以便colormap根据Data
有什么想法吗?