2017-02-07 13 views
3

Я использую foll. код для построения цветной панели на карте нижеУстановка первого цвета в базовой таблице colorbar на серый не работает

 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 

Однако результирующая карта не имеет первого цвета как серый. Как я могу это исправить?

ответ

4

lcmaplcmaplcmap Если вы используете свое определение cmap, длина записи составляет всего 256 записей, и установка только 0-й записи для нового цвета едва заметна в цветовой шкале или в наборе данных, который имеет несколько наименьших значений. Я преувеличил его: (1) установив новый цвет на зеленый, для максимальной контрастности, и (2) установил 32 наименьших значения lcmap для нового цвета, и это нормально. В BaseMap примере файл 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 имеет девять значений, как и ожидалось, но превратить его в a 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

Там вы идете!

+0

благодаря @cphlewis! – user308827

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