2016-01-15 4 views
3

Учитывая эту тепловую карту:Seaborn Heatmap Colorbar Ярлык в процентах

import numpy as np; np.random.seed(0) 
import seaborn as sns; sns.set() 
uniform_data = np.random.rand(10, 12) 
ax = sns.heatmap(uniform_data) 

Как бы я идти о том, барные значения цвета отображаются в формате процентов? Кроме того, что, если я просто хотел показать первое и последнее значение в цветовой полосе?

Заранее благодарен!

ответ

11

перебором на решении @mwaskom , не создавая Colorbar сами:

import numpy as np 
import seaborn as sns 
data = np.random.rand(8, 12) 
ax = sns.heatmap(data, vmin=0, vmax=1) 
cbar = ax.collections[0].colorbar 
cbar.set_ticks([0, .2, .75, 1]) 
cbar.set_ticklabels(['low', '20%', '75%', '100%']) 

custom seaborn heatmap color bar labels

4

У вас должен быть доступ к объекту colorbar. Это может быть похоронено в объекте фигуры где-то, но я не мог найти его, так просто, что нужно сделать, это просто сделать это самостоятельно:

import numpy as np; np.random.seed(0) 
import seaborn as sns; sns.set() 
uniform_data = np.random.rand(10, 12) 
ax = sns.heatmap(uniform_data, cbar=False, vmin=0, vmax=1) 
cbar = ax.figure.colorbar(ax.collections[0]) 
cbar.set_ticks([0, 1]) 
cbar.set_ticklabels(["0%", "100%"]) 

enter image description here

+0

Эй спасибо. Вы знаете, где я могу найти список возможных annot_kws и cbar_kws? –

+0

обратитесь к [matplotlib] (http://matplotlib.org/api/colorbar_api.html#matplotlib.colorbar.Colorbar) документации ... – Alexandre

4

Ну, у меня была аналогичная проблема, и выяснили, как properly set a formatter. Ваш пример станет чем-то вроде:

import numpy as np; np.random.seed(0) 
import seaborn as sns; sns.set() 

uniform_data = np.random.rand(10, 12) 
uniform_data = 100 * uniform_data 

sns.heatmap(uniform_data, 
      cbar_kws={'format': '%.0f%%'}) 

Итак, что вы должны сделать, это пройти старый стиль строки форматировщик добавить проценты к Colorbar этикетки. Не совсем то, что я назвал бы самоочевидным, но работает ...

Чтобы показать только первый и последний, затем добавить vmax, vmin и дополнительный параметр для cbar_kws:

sns.heatmap(uniform_data, 
      cbar_kws={'format': '%.0f%%', 'ticks': [0, 100]}, 
      vmax=100, 
      vmin=0) 
Смежные вопросы