Пользовательская Аннотация 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.
параметр 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г', которая имеет смысл только для числовых значений и приведет к ошибке для текстовых меток.
Я не верю, что это возможно в текущей версии. Если вы до 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]);