我需要比较2张地图,我的色标会自动适合该地图的数据集。因此,这两个地图将具有不同的图例(相同的颜色,但未映射到相同的数字),这是比较的问题:我希望该地图使用相同的色标(映射到相同的值)。例如下图:我希望以与数据1相同的色标来绘制数据2!
简化代码:
def visualize_my_map(data):
fig,axes = plt.subplots(1, 1)
cmap = customColorMap(data) # I built my custom cmap to center on 0, based on data
bm = Basemap()
im = bm.imshow(np.flipud(data.reshape(shape)),cmap=cmap)
cbar = plt.colorbar(im)
现在,我想保存这个精确的色标(每种颜色都映射到相应的值),以再次调用带有数据2的此函数,并使用相同的图例进行绘制。
我不能只设置vmin和vmax,因为这将违反构建我的自定义颜色图的目的。这是customColorMap的代码:
def customColorMap(cmap, serie, resize, name):
''' fct to re-center and re-size colormap'''
vmax = serie.max()
vmin = serie.min()
midpoint= 1 - vmax / (vmax + abs(vmin))
cdict = { 'red': [], 'green': [], 'blue': [], 'alpha': [] }
# regular index to compute the colors
reg_index = np.linspace(start, stop, 257)
# shifted index to match the data
shift_index = np.hstack([
np.linspace(0.0, midpoint, 128, endpoint=False),
np.linspace(midpoint, 1.0, 129, endpoint=True)
])
for ri, si in zip(reg_index, shift_index):
r, g, b, a = cmap(ri)
dict['red'].append((si, r, r))
cdict['green'].append((si, g, g))
cdict['blue'].append((si, b, b))
cdict['alpha'].append((si, a, a))
newcmap = matplotlib.colors.LinearSegmentedColormap(name, cdict)
plt.register_cmap(cmap=newcmap)
return newcmap