Доступ к текущей информации о столбцах и строках в Seaborn FacetGrid - PullRequest
0 голосов
/ 28 февраля 2020

Я строю FacetGrid тепловых карт с пакетом seaborn в python.

Теперь я хочу наложить каждую тепловую карту штриховкой в ​​зависимости от значения плитки тепловой карты в следующем примере:

добавление штриховок к графику тепловых карт морского побережья

Моя функция, которая определяет, заштрихована ли ячейка или нет, зависит от информации о строках и столбцах FacetGrid

def draw_heatmap(*args, **kwargs):
    kwargs.pop('color')
    data = kwargs.pop('data')
    d = data.pivot(index=args[1], columns=args[0], values=args[2])
    d = d.sort_index(ascending=False)
    sns.heatmap(d, **kwargs)


d = np.array(
    np.meshgrid(np.arange(1, 6, 1),
                np.arange(6, 11, 1),
                np.arange(1, 6, 1),
                np.arange(6, 11, 1))).T.reshape(-1, 4)
d = np.c_[d, np.random.randint(1, 5, 625)]
df = pd.DataFrame(d, columns=['a', 'b', 'c', 'd', 'e'])
fg = sns.FacetGrid(df,
                   col='b',
                   row='a',
                   margin_titles=True,
                   height=5,
                   aspect=1)
fg = fg.map_dataframe(draw_heatmap,
                      'c',
                      'd',
                      'e',
                      cbar=False,
                      cmap='viridis',
                      annot=True,
                      fmt=".0f",
                      linewidths=.5)

Теперь, в зависимости от значений 'b', 'a' и 'values', где 'b', 'a' - строки и столбцы FacetGrid, а 'values' - значения сводной таблицы в функции draw_heatmap, я хочу применить маска.

# fgA and fgB are the input values coming from the FacetGrid
hatch = data.stack().to_frame().apply(lambda x: myFunc(fgA, fgB, x.name[0], x.name[1]), axis=1).unstack()
x = np.arange(len(data.columns)+1)
y = np.arange(len(data.index)+1)
zm = np.ma.masked_less(hatch.values, 5)
fig, ax = plt.subplots()
sns.heatmap(w, cmap='viridis', annot=True, fmt=".0f", linewidths=.5, ax=ax)
ax.pcolor(x, y, zm, hatch='//', alpha=0.)

Как я могу это реализовать и получить доступ к информации FacetGrid при построении одиночных тепловых карт?

Спасибо

1 Ответ

0 голосов
/ 01 марта 2020

Вы можете получить объект оси в FacetGrid, используя атрибут axes. Это массив всех осей в вашей FacetGrid.

fg.axes[b, a].pcolor(x, y, zm, hatch='//', alpha=0.)
...