изменение некоторых квадратов в тепловой карте сиборна
Скажем, у меня есть тепловая карта, которая выглядит так (оси обрезаны):
Я хочу иметь возможность изменять некоторые квадраты для обозначения статистической значимости. Я знаю, что я мог бы замаскировать квадраты, которые не являются статистически значимыми, но я все еще хочу сохранить эту информацию (и не устанавливать значения в ноль). Варианты для этого включают 1) выделение текста на определенных квадратах жирным шрифтом, 2) Добавление хэтч - подобной функциональности, чтобы определенные квадраты имели штриховку, или 3) добавление символа в определенные квадраты.Есть идеи по этому поводу? Спасибо!
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
Patch
es, и штриховка коллекции может быть установлена только на коллекции в целом. Чтобы установить люк отдельной ячейки, вам нужно, чтобы они были отдельными пятнами, и все становится грязным. Возможно (надеюсь), кто-то более знающий, чем я, может прийти и сказать, что это неправильно, и что это довольно легко, но если бы мне пришлось угадать, я бы сказал, что изменить стиль текста будет легче, чем установить лючок.