28

Mam kilka pytań dotyczących etykietowania dla clustermap w seaborn. Po pierwsze, możliwe jest wyodrębnienie wartości odległości dla hierarchicznego grupowania i narysowanie wartości w wizualizacji struktury drzewiastej (może tylko pierwsze trzy poziomy).Etykiety na clustermap u seaborn?

Oto mój przykładowy kod do tworzenia clustermap działki:

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") 

enter image description here

Pozostałe dwa pytania: - Jak obrócić y etykiet, ponieważ pokrywa się ze sobą.
- Przenoszenie paska koloru na dół lub na prawo. (Było question dla mapy cieplnej, ale nie działa dla mojego przypadku.Nie odpowiada również kolorowi pozycji bar)

+1

Używasz najnowsze wersje Seaborn, etc? Wkleiłem twój przykładowy kod do notatnika na tmpnb.org, a etykiety osi po prawej są poziome. – jb326

+0

@ jb326, Właśnie testuję ten przykładowy kod na tmpnb, który działa dobrze. Jednak kiedy wkleję mój przykład pod koniec mojego bardzo długiego programu, etykiety stają się pionowe. W moim programie zrobiłem wiele spersonalizowanych kreślenia przed tym, domyślam się, że inne spisy zmieniały domyślne ustawienie matplotlib lub seaborn. Dzięki za pomoc mi znaleźć to możliwe wyjaśnienie .. – Bin

Odpowiedz

43

Miałem dokładnie ten sam problem z etykietami na osi Y, które zostały obrócone i znalazłem rozwiązanie . Problem polega na tym, że jeśli podasz plt.yticks(rotation=0), jak zasugerowano w pytaniu, do którego się odwołałeś, obróci etykiety na colobar ze względu na sposób działania ClusterGrid.

go rozwiązać i obrócić odpowiednie etykiety, trzeba odwołać się do Axes z podstawowej Heatmap i obrócić te:

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

Na inne pytanie o umieszczeniu colorbar, nie sądzę, to jest obsługiwane w tej chwili, jak niestety wskazuje this Github issue.

I wreszcie dla hierarchicznych wartości odległości klastrów, można uzyskać dostęp do MATRICS łączący do wierszy lub kolumn z:

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

Użyłem 'plt.setp (cg.ax_heatmap.yaxis.get_majorticklabels(), obrót = 0)' w notatniku jupyter i zrobił to, co miał, ale również zwrócił pionowa kolumna "Brak" przed wykreśleniem wykresu? – KillerSnail

+1

@KillerSnail Znalazłem, że dodanie 'plt.show()' po 'plt.setp' spowodowało, że lista' None' zniknęła. – vsachar

+0

W jaki sposób mogę obrócić etykiety jak powyżej i nadać etykiety osi X i Y, etykiety zostaną zastosowane do ostatniej aktywnej osi, tak jak do legendy. Próbowałem kilku rzeczy, ale nie mogłem znaleźć prawidłowego sposobu na zrobienie tego. Oto kod do odtworzenia (jego macierz dezorientacji): cg = sns.clustermap (cm) plt.setp (cg.ax_heatmap.yaxis.get_majorticklabels(), obrót = 0) plt.xlabel ("przewidywana etykieta") plt.ylabel ("True Label") plt.show() –

1

można przenieść colorbar wokół zmieniając położenie swojego oś CAX: cg.cax.set_position((.85,.1,.1,.1)), na przykład, gdzie (a, b, c, d) są odpowiednio pozycją wyjściową x, pozycją początkową y, szerokością xi wysokością osi, w odniesieniu do współrzędnych osi.

1
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 
1

Nieco inny sposób obracać etykiety

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