Cómo hacer un mapa de calor cuadrado (trama general, no las celdas)

Cómo hacer un mapa de calor cuadrado (trama general, no las celdas)

El atributo square en sns.heatmap funciona de manera extraña. Cuando trazo un mapa de calor usando números aleatorios y uso el atributo cuadrado, funciona bien.

Mapa de calor aleatorio usando numpy

Cuando trazo el mapa de calor con mi matriz, crea el mapa de calor correctamente.

ingrese la descripción de la imagen aquí

Sin embargo, cuando uso el atributo cuadrado, el gráfico se convierte en un pequeño cuadrado.

ingrese la descripción de la imagen aquí

No puedo entender qué está mal aquí.

Mostrar la mejor respuesta

Bueno, square=True significa: "mostrar todas las celdas como cuadrados". La única forma de ajustar los cuadrados de 7x560 en la región del gráfico es reducir la altura en un factor de aproximadamente 80. En otras palabras: se recomienda enfáticamente usar square=False para datos que tienen una gran diferencia entre las direcciones horizontal y vertical. Seaborn no está haciendo nada malo aquí, solo te da lo que pediste.

Si desea que el mapa de calor sea cuadrado (en lugar de las celdas), puede usar ax = sns.heatmap(data, square=False) y luego ax.set_aspect(data.shape[1] / data.shape[0]).

Este es un ejemplo:

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

data = np.random.randn(7, 560).cumsum(axis=1).cumsum(axis=0)
data -= data.min(axis=1, keepdims=True)
data /= data.max(axis=1, keepdims=True)

ax = sns.heatmap(data, cmap='turbo', cbar=True, xticklabels=50,
                 yticklabels=['Grumpy', 'Dopey', 'Doc', 'Happy', 'Bashful', 'Sneezy', 'Sleepy'])
ax.set_aspect(data.shape[1] / data.shape[0])
ax.tick_params(labelrotation=0)
plt.tight_layout()
plt.show()

cuadrado sns.mapa de calor