изменение некоторых квадратов в тепловой карте сиборна


Скажем, у меня есть тепловая карта, которая выглядит так (оси обрезаны): Введите описание изображения здесь

Я хочу иметь возможность изменять некоторые квадраты для обозначения статистической значимости. Я знаю, что я мог бы замаскировать квадраты, которые не являются статистически значимыми, но я все еще хочу сохранить эту информацию (и не устанавливать значения в ноль). Варианты для этого включают 1) выделение текста на определенных квадратах жирным шрифтом, 2) Добавление хэтч - подобной функциональности, чтобы определенные квадраты имели штриховку, или 3) добавление символа в определенные квадраты.

Есть идеи по этому поводу? Спасибо!

2 8

2 ответа:

Вы можете построить график дважды, применяя маску к ячейкам, которые вы не хотите подчеркивать во второй раз:

import numpy as np
import seaborn as sns
x = np.random.randn(10, 10)
sns.heatmap(x, annot=True)
sns.heatmap(x, mask=x < 1, cbar=False,
            annot=True, annot_kws={"weight": "bold"})

Один из подходов заключается в непосредственном доступе к объектам Text и изменении их веса/стиля. Приведенный ниже код возьмет некоторые примерные данные и попытается выделить каждую запись, равную 118:

flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights, annot=True, fmt="d")

for text in ax.texts:
    text.set_size(14)
    if text.get_text() == '118':
        text.set_size(18)
        text.set_weight('bold')
        text.set_style('italic')

Введите описание изображения здесь

Я не специалист по matplotlib/seaborn, но мне кажется, что для создания отдельной ячейки в тепловой карте потребуется немного работы. Короче говоря, тепловая карта - это Collection matplotlib Patches, и штриховка коллекции может быть установлена только на коллекции в целом. Чтобы установить люк отдельной ячейки, вам нужно, чтобы они были отдельными пятнами, и все становится грязным. Возможно (надеюсь), кто-то более знающий, чем я, может прийти и сказать, что это неправильно, и что это довольно легко, но если бы мне пришлось угадать, я бы сказал, что изменить стиль текста будет легче, чем установить лючок.