在matplotlib中,我想在某个特定值区间更改colorbar的颜色。例如,我想更改地震颜色条,让-0.5和0.5之间的值变为白色,我该怎么做?
非常感谢
答案 0 :(得分:4)
您基本上需要创建自己的色彩映射表,其中包含您想要的特定功能。当然,这样做时可以使用现有的色彩图。
色彩映射始终介于0
和1
之间。然后将该范围映射到数据间隔。因此,为了在-0.5
和0.5
之间创建白色,我们需要知道数据范围 - 假设数据从-1
变为1
。然后我们可以决定让地震图的较低(蓝色)部分从-1
变为-0.5
,然后在-0.5
和+0.5
之间变为白色,最后是上部从0.5
到1
的地震图(红色)。在色图的语言中,这对应于范围[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()
对于更一般的情况,您可能需要颜色标准化(使用matplotlib.colors.Normalize
)。参见例如,其中colormap中的某种颜色始终固定为数据值0,与数据范围无关。