def dendrogram(df, number_of_clusters, agglomerated_feature_labels):
import seaborn as sns
# Todo: Create Dendrogram
# used networks are the labels occuring in agglomerated_features.labels_
# which corresponds to np.arange(0, number_of_clusters)
# number_of_clusters = int(df.shape[1] / 1.2)
# used_networks = np.arange(0, number_of_clusters, dtype=int)
used_networks = np.unique(agglomerated_feature_labels)
# used_networks = [1, 5, 6, 7, 8, 11, 12, 13, 16, 17]
# In our case all columns are clustered, which means used_columns is true in every element
# used_columns = (df.columns.get_level_values(None)
# .astype(int)
# .isin(used_networks))
# used_columns = (agglomerated_feature_labels.astype(int).isin(used_networks))
# df = df.loc[:, used_columns]
# Create a custom palette to identify the networks
network_pal = sns.cubehelix_palette(len(used_networks),
light=.9, dark=.1, reverse=True,
start=1, rot=-2)
network_lut = dict(zip(map(str, df.columns), network_pal))
# Convert the palette to vectors that will be drawn on the side of the matrix
networks = df.columns.get_level_values(None)
# networks = agglomerated_feature_labels
network_colors = pd.Series(networks, index=df.columns).map(network_lut)
# plt.figure()
# cg = sns.clustermap(df, metric="correlation")
# plt.setp(cg.ax_heatmap.yaxis.get_majorticklabels(), rotation=0)
sns.set(font="monospace")
# Create custom colormap
cmap = sns.diverging_palette(h_neg=210, h_pos=350, s=90, l=30, as_cmap=True)
cg = sns.clustermap(df.astype(float).corr(), cmap=cmap, linewidths=.5, row_colors=network_colors,
col_colors=network_colors)
plt.setp(cg.ax_heatmap.yaxis.get_majorticklabels(), rotation=0)
plt.setp(cg.ax_heatmap.xaxis.get_majorticklabels(), rotation=90)
# plt.xticks(rotation=90)
plt.show()
评论列表
文章目录