如何更改colorbar的颜色(在某个特定值区间内)?

时间:2017-01-23 12:22:23

标签: matplotlib colorbar

在matplotlib中,我想在某个特定值区间更改colorbar的颜色。例如,我想更改地震颜色条,让-0.5和0.5之间的值变为白色,我该怎么做?

非常感谢

1 个答案:

答案 0 :(得分:4)

您基本上需要创建自己的色彩映射表,其中包含您想要的特定功能。当然,这样做时可以使用现有的色彩图。

色彩映射始终介于01之间。然后将该范围映射到数据间隔。因此,为了在-0.50.5之间创建白色,我们需要知道数据范围 - 假设数据从-1变为1。然后我们可以决定让地震图的较低(蓝色)部分从-1变为-0.5,然后在-0.5+0.5之间变为白色,最后是上部从0.51的地震图(红色)。在色图的语言中,这对应于范围[0,0.25][0.25, 0.75][0.75,1]。然后我们可以创建一个列表,第一个和最后一个25%是地震图的颜色,中间是50%白色。

此列表可用于使用matplotlib.colors.LinearSegmentedColormap.from_list("colormapname", listofcolors)创建色彩映射。

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

n=50
x = 0.5
lower = plt.cm.seismic(np.linspace(0, x, n))
white = plt.cm.seismic(np.ones(100)*0.5)
upper = plt.cm.seismic(np.linspace(1-x, 1, n))
colors = np.vstack((lower, white, upper))
tmap = matplotlib.colors.LinearSegmentedColormap.from_list('terrain_map_white', colors)

x = np.linspace(0,10)
X,Y = np.meshgrid(x,x)
z = np.sin(X) * np.cos(Y*0.4)

fig, ax = plt.subplots()
im = ax.imshow(z, cmap=tmap)    
plt.colorbar(im)

plt.show() 

Encrypted Local Store

对于更一般的情况,您可能需要颜色标准化(使用matplotlib.colors.Normalize)。参见例如enter image description here,其中colormap中的某种颜色始终固定为数据值0,与数据范围无关。