将底图颜色栏中的第一种颜色设置为灰色不起作用

时间:2017-02-07 01:55:08

标签: python matplotlib matplotlib-basemap

我正在使用foll。用于在下面的地图中绘制颜色条的代码

        import palettable
        cmap = palettable.colorbrewer.sequential.PuRd_9.mpl_colormap
        lcmap = [cmap(i) for i in range(cmap.N)]
        lcmap[0] = (.5, .5, .5, 1.0)  # force the first color entry to be grey
        cmap = cmap.from_list('custom cmap', lcmap, cmap.N)  # create the new map

但是,生成的地图的第一种颜色不是灰色。我该如何解决?

2 个答案:

答案 0 :(得分:4)

当我运行cmap定义时,lcmap长度为256个条目,并且在颜色栏或几乎没有最低值的数据集中几乎看不到将第0个条目设置为新颜色。我通过以下方法夸大它:(1)将新颜色设置为绿色,以获得最大对比度,以及(2)将lcmap的32个最低条目设置为新颜色,并且它很好。在底图示例文件plotsst.py中,结果为:

enter image description here

插入此代码以替换定义im1的行:

import palettable
cmap = palettable.colorbrewer.sequential.PuRd_9.mpl_colormap
lcmap = [cmap(i) for i in range(cmap.N)]
for i in range(32):
    lcmap[i] = (0, .5, 0, 1.0)
cmap_green = cmap.from_list('0th entry green', lcmap, cmap.N)

im1 = m.pcolormesh(lons,lats,sst,shading='flat',cmap=cmap_green,latlon=True)
正如预期的那样,

palettable.colorbrewer.sequential.PuRd_9有九个值,但将其转换为mpl_colormap可将其平滑为256.

合并@Pablo Reyes'回答,插入的代码是

import palettable
cmap = palettable.colorbrewer.sequential.PuRd_9.mpl_colormap
lcmap = [cmap(i) for i in range(cmap.N)]
lcmap[0] = (0, .5, 0, 1.0)
cmap_green = cmap.from_list('0th entry green', lcmap, 9)

im1 = m.pcolormesh(lons,lats,sst,shading='flat',cmap=cmap_green,latlon=True)

,结果是

enter image description here

你去吧!

答案 1 :(得分:3)

而不是使用cmap.N使用您拥有的细分数量,9:

import palettable
cmap = palettable.colorbrewer.sequential.PuRd_9.mpl_colormap
lcmap = [cmap(i) for i in range(cmap.N)]
lcmap[0] = (.5, .5, .5, 1.0)  # force the first color entry to be grey
cmap = cmap.from_list('custom cmap', lcmap, 9)  # create the new map