Пользовательская Аннотация Seaborn Heatmap

Я использую Seaborn в Python для создания тепловой карты. Я могу аннотировать ячейки с переданными значениями, но я хотел бы добавить аннотации, которые означают, что означает ячейка. Например, вместо того, чтобы просто видеть 0.000000, Я хотел бы видеть соответствующую метку, например " Foo " или 0.000000 (Foo).

на Seaborn documentation для функции тепловой карты немного загадочно с параметром, который я считаю ключевым здесь:

annot_kws : dict of key, value mappings, optional
  Keyword arguments for ax.text when annot is True.

I пробовал установку annot_kws в словарь псевдонимов значений, т. е. {'Foo' : -0.231049060187, 'Bar' : 0.000000}, etc. но я получаю атрибут.

вот мой код (я вручную создал массив данных здесь для воспроизводимости):

data = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]])
axs = sns.heatmap(data, vmin=-0.231049, vmax=0, annot=True, fmt='f', linewidths=0.25)

вот (рабочий) вывод, когда я не использую

3 ответов


эта функция только что была добавлена в последней версии Seaborn 0.7.1.

С история обновлений Seaborn:

параметр annot heatmap () теперь принимает прямоугольный набор данных в дополнение к логическому значению. Если передается набор данных, его значения будут использоваться для аннотаций, а основной набор данных-для цветов ячеек тепловой карты

здесь пример

data = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]])
labels =  np.array([['A','B'],['C','D'],['E','F']])
fig, ax = plt.subplots()
ax = sns.heatmap(data, annot = labels, fmt = '')

Примечание, fmt = " необходимо, если вы используете нечисловые метки, так как значение по умолчанию fmt='.2г', которая имеет смысл только для числовых значений и приведет к ошибке для текстовых меток. enter image description here


Я не верю, что это возможно в текущей версии. Если вы до hack-y обходной путь, вы можете сделать следующее ...

# Create the 1st heatmap without labels 
sns.heatmap(data=df1, annot=False,)

# create the second heatmap, which contains the labels,
# turn the annotation on,
# and make it transparent
sns.heatmap(data=df2, annot=True, alpha=0.0)

обратите внимание, что у вас может возникнуть проблема с окраской текстовых меток. Здесь я создал пользовательский cmap чтобы все метки были равномерно черными.


aanot_kws в Seaborn служит другой цели, а именно, обеспечивает доступ к как отображаются аннотации, а не что отображается

import matplotlib.pyplot as plt
import seaborn as sns

sns.set()
fig, ax = plt.subplots(1,2)
ata = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]])
sns.heatmap(data, vmin=-0.231049, vmax=0, annot=True, fmt='f', annot_kws={"size": 15}, ax=ax[0])
sns.heatmap(data, vmin=-0.231049, vmax=0, annot=True, fmt='f', annot_kws={"size": 10}, ax=ax[1]);

enter image description here