2017-01-23 61 views

回答

3

你基本上需要创建自己的颜色表有你想要的特定功能。当然,这样做时可以使用现有的色彩贴图。

的colormaps总是01之间。这个范围将被映射到数据区间。因此,为了-0.50.5之间建立的白人,我们需要知道数据的范围 - 比方说数据从去到-11。然后,我们可以决定让地震地图的下部(蓝色)部分从-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() 

enter image description here

对于更一般的情况下,你可能需要(使用matplotlib.colors.Normalize)颜色正常化。见例如this example,其中某一颜色在颜色表总是固定在0的数据值,独立于数据的范围。