2017-02-08 6 views

ответ

2

Потому что sns.heatmap возвращает объект matplotlib оси, мы не можем использовать hm напрямую , Но мы можем использовать объект cmap для возврата значений rgba данных. Редактировать Код обновлен, чтобы включить нормализацию данных.

from matplotlib.colors import Normalize 

data = np.random.randn(10, 10) 
cmap = cm.get_cmap('Greens') 
hm = sns.heatmap(data, cmap=cmap) 

# Normalize data 
norm = Normalize(vmin=data.min(), vmax=data.max()) 
rgba_values = cmap(norm(data)) 

Все цвета в настоящее время содержатся в rgba_values. Таким образом, чтобы получить цвет верхнего левого квадрата в тепловой карты можно просто сделать

In [13]: rgba_values[0,0] 
Out[13]: array([ 0.  , 0.26666668, 0.10588235, 1.  ]) 

Более подробную информацию, проверить Getting individual colors from a color map in matplotlib


Update

Чтобы перенастроить цветовую палитру с помощью center и robust ключевые слова в вызове sns.heatmap, вам просто нужно переопределить vmin и vmax. Если посмотреть на соответствующий исходный код на море (http://github.com/mwaskom/seaborn/blob/master/seaborn/matrix.py#L202), то изменения ниже vmin и vmax должны сделать трюк.

data = np.random.randn(10, 10) 
center = 2 
robust = False 
cmap = cm.coolwarm 
hm = sns.heatmap(data, cmap=cmap, center=center, robust=robust) 

vmin = np.percentile(data, 2) if robust else data.min() 
vmax = np.percentile(data, 98) if robust else data.max() 
vmin += center 
vmax += center 

norm = Normalize(vmin=vmin, vmax=vmax) 
rgba_values = cmap(norm(data)) 
+0

Thank you lanery. Что делать, если я должен использовать варианты «центр» и «надежный» для настройки цветовой карты, есть ли способ использовать измененную цветовую палитру? говорят, например: Heatmap = sns.heatmap ( np.random.randn (10, 10), CMAP = cm.coolwarm, центр = 1, надежный = True) – spfraib

+0

Вы должны добавить объект норму - так называемый вы только отображаете значения в [0-1]. – mwaskom

+0

Также cm.get_cmap ('Greens') возвращает объект cm.Greens. – mwaskom