保存色标matplotlib

时间:2018-09-19 06:19:37

标签: python matplotlib matplotlib-basemap colorbar colormap

我需要比较2张地图,我的色标会自动适合该地图的数据集。因此,这两个地图将具有不同的图例(相同的颜色,但未映射到相同的数字),这是比较的问题:我希望该地图使用相同的色标(映射到相同的值)。例如下图:我希望以与数据1相同的色标来绘制数据2!

enter image description here

简化代码:

    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

0 个答案:

没有答案