Я использую класс Seaborn FacetGrid
для построения набора матриц с использованием функции heatmap
, также из Seaborn. Однако я не могу настроить соотношение сторон этих подзаговоров. Вот пример:
import seaborn as sns
import numpy as np
import pandas as pd
# Generate a set of sample data
np.random.seed(0)
indices = pd.MultiIndex.from_product((range(5), range(5), range(5)), names=('label0', 'label1', 'label2'))
data = pd.DataFrame(np.random.uniform(0, 100, size=len(indices)), index=indices, columns=('value',)).reset_index()
def draw_heatmap(*args, **kwargs):
data = kwargs.pop('data')
d = data.pivot(index=args[1], columns=args[0], values=args[2])
sns.heatmap(d, **kwargs)
fg = sns.FacetGrid(data, col='label0')
fg.map_dataframe(draw_heatmap, 'label1', 'label2', 'value', cbar=False)
Это создает это изображение:
Обратите внимание, что элементы матричных графиков являются прямоугольными, а не квадратными. Если бы я делал один сюжет (без FacetGrid
), я мог бы передать опцию square=True
на sns.heatmap
, чтобы сделать квадрат сюжета. Однако, если я помещаю это в аргументы map_dataframe
, я получаю этот результат:
fg = sns.FacetGrid(data, col='label0')
fg.map_dataframe(draw_heatmap, 'label1', 'label2', 'value', cbar=False, square=True)
Похоже, что оси слишком велики для данных, хотя соотношение сторон по умолчанию для FacetGrid
равно 1. (И явно установка aspect=1
при построении FacetGrid
не помогает.)
Есть ли способ исправить это?