Etiquetas que se superponen: ¿Es posible controlar el tamaño de celda del mapa de calor en el mar?

Tengo un conjunto de datos con alrededor de 200 observaciones que me gustaría trazar como un mapa de calor. Cada observación tiene una cadena asociada que me gustaría mostrar. Mi problema es que no puedo leer estas tags ya que se superponen entre sí. Por lo tanto, mi pregunta es si se puede establecer de alguna manera el tamaño de celda del mapa de calor al tamaño de fuente de la yticklabel o si existe alguna otra solución para eso.

En mi ejemplo a continuación, uso datos aleatorios para fines de ilustración:

 import seaborn as sns import numpy as np data = np.random.rand(200, 10) ax = sns.heatmap(data) for item in ax.get_yticklabels(): item.set_rotation(0) 

lo que me da:

introduzca la descripción de la imagen aquí

¿Hay alguna manera de hacer que estos yticklabels legibles? En el caso ideal, tendría una opción que me permita configurar la altura de las celdas al tamaño de yticklabels de las yticklabels . ¿Es eso posible?

EDITAR:

Como se mencionó en los comentarios, una posibilidad sería boost el tamaño de la figura. Lo intenté de la siguiente manera:

 import seaborn as sns import numpy as np import matplotlib.pyplot as plt data = np.random.rand(200, 10) fig, ax = plt.subplots() fig.set_size_inches(38.5, 10.5) ax2 = sns.heatmap(data, ax=ax) for item in ax2.get_yticklabels(): item.set_rotation(0) 

Esto me da la misma salida. ¿Lo estoy usando correctamente?

La única forma de hacer más espacio para las tags es boost la altura de la matriz. La única otra opción sería disminuir el tamaño de la fuente, pero supongo que eso no es lo que quieres. Por lo tanto, puede calcular la altura ideal de la figura según el número de filas en la matriz y el tamaño de fuente de las tags. Cuando guardas el gráfico resultante obtienes el resultado esperado. Parece que la altura de la ventana GUI que se ve al llamar a plt.show() está limitada a la altura de la pantalla:

 import numpy as np import matplotlib.pyplot as plt import seaborn as sns # create some random data data = np.random.rand(150, 10) # get the tick label font size fontsize_pt = plt.rcParams['ytick.labelsize'] dpi = 72.27 # comput the matrix height in points and inches matrix_height_pt = fontsize_pt * data.shape[0] matrix_height_in = matrix_height_pt / dpi # compute the required figure height top_margin = 0.04 # in percentage of the figure height bottom_margin = 0.04 # in percentage of the figure height figure_height = matrix_height_in / (1 - top_margin - bottom_margin) # build the figure instance with the desired height fig, ax = plt.subplots( figsize=(6,figure_height), gridspec_kw=dict(top=1-top_margin, bottom=bottom_margin)) # let seaborn do it's thing ax = sns.heatmap(data, ax=ax) # save the figure plt.savefig('/tmp/test.png') 

Resultado:

introduzca la descripción de la imagen aquí