python matplotlib machine-learning artificial-intelligence seaborn

python - Etiquetas para clustermap en seaborn?



matplotlib machine-learning (4)

Tengo varias preguntas sobre el etiquetado de clustermap en seaborn . Primero, es posible extraer los valores de distancia para la agrupación jerárquica y graficar el valor en la visualización de estructura de árbol (tal vez solo los primeros tres niveles).

Aquí está mi código de ejemplo para crear un diagrama de clustermap:

import pandas as pd import numpy as np import seaborn as sns get_ipython().magic(u''matplotlib inline'') m = np.random.rand(50, 50) df = pd.DataFrame(m, columns=range(4123, 4173), index=range(4123, 4173)) sns.clustermap(df, metric="correlation")

Las otras dos preguntas son: - Cómo rotar las etiquetas y, ya que se superponen juntas.
- Cómo mover la barra de color hacia abajo o hacia la derecha. (Hubo una question para el mapa de calor, pero no funciona para mi caso. Tampoco aborda la posición de la barra de color)


Tuve exactamente el mismo problema con las etiquetas en el eje y que giraban y encontré una solución. El problema es que si haces plt.yticks(rotation=0) como se sugiere en la pregunta a la que te refieres, rotará las etiquetas en tu barra de color debido a la forma en que funciona.

Para resolverlo y rotar las etiquetas correctas, debe hacer referencia a los Axes del Heatmap subyacente y Heatmap :

cg = sns.clustermap(df, metric="correlation") plt.setp(cg.ax_heatmap.yaxis.get_majorticklabels(), rotation=0)

Para su otra pregunta sobre la ubicación de la barra de color, no creo que esto sea compatible en este momento, como lo indica desafortunadamente este problema de Github .

Y finalmente, para los valores de distancia de agrupación jerárquica, puede acceder a los matrics de vinculación para filas o columnas con:

cg = sns.clustermap(df, metric="correlation") cg.dendrogram_col.linkage # linkage matrix for columns cg.dendrogram_row.linkage # linkage matrix for rows


Una forma un poco diferente de rotar las etiquetas

g.ax_heatmap.set_yticklabels(g.ax_heatmap.get_yticklabels(), rotation=0)


puede mover la barra de colores cambiando la posición de su eje cax : cg.cax.set_position((.85,.1,.1,.1)) , por ejemplo, donde (a, b, c, d) son la posición inicial x, la posición inicial y, el ancho xy la altura del eje, respectivamente, en términos de coordenadas del eje.


import seaborn as sns g = sns.clustermap(heatmap_df, metric="correlation") plt.setp(g.ax_heatmap.get_yticklabels(), rotation=0) # For y axis plt.setp(g.ax_heatmap.get_xticklabels(), rotation=90) # For x axis