Маскировка аннотаций в морской карте - PullRequest
0 голосов
/ 25 августа 2018

Я хотел бы сделать тепловую карту, которая имеет аннотацию только в определенных ячейках.Я думаю, что один из способов сделать это - создать тепловую карту с аннотациями во всех ячейках, а затем наложить другую тепловую карту, у которой нет аннотации, но которая маскируется в областях, для которых я хочу, чтобы исходные аннотации были видны:

import numpy as np
import seaborn as sns

par_corr_p = np.array([[1, 2], [3, 4]])
masked_array = np.ma.array(par_corr_p, mask=par_corr_p<2)

fig, ax = plt.subplots()
sns.heatmap(par_corr_p, ax=ax, cmap ='RdBu_r', annot = par_corr_p, center=0, vmin=-5, vmax=5)
sns.heatmap(par_corr_p, mask = masked_array.mask, ax=ax,  cmap ='RdBu_r', center=0, vmin=-5, vmax=5)

Однако это не работает - вторая тепловая карта не закрывает первую:

enter image description here

Пожалуйста, сообщите

1 Ответ

0 голосов
/ 25 августа 2018

Я попробовал несколько вещей, включая использование numpy.nan или "" в массиве annot.К сожалению, они не работают.

Это, наверное, самый простой способ.Это включает захват texts осей, которые должны быть только метками в annot, которые sns.heatmap помещает туда.

import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns

par_corr_p = np.array([[1, 2], [3, 4]])

data = par_corr_p
show_annot_array = data >= 2

fig, ax = plt.subplots()
sns.heatmap(
    ax=ax,
    data=data,
    annot=data,
    cmap ='RdBu_r', center=0, vmin=-5, vmax=5
)
for text, show_annot in zip(ax.texts, (element for row in show_annot_array for element in row)):
    text.set_visible(show_annot)

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...