根据标签着色树状图

时间:2020-06-28 16:02:48

标签: python matplotlib scikit-learn dendrogram

我正在使用SciKit-Learn层次结构从距离矩阵创建树状图。这个距离矩阵有标签,我正在尝试根据这些标签为树状图着色。

import pandas as pd
import random

letters = ['a', 'b', 'c','d','e','f','g','h','i','j']
df = pd.DataFrame(index=letters, columns=letters)
for i in range(len(letters)):
    for j in range(i+1,len(letters)):
        r = random.randint(1,5)
        df.iloc[i,j] = r
        df.iloc[j, i] = r
dist_matrix = []
for i in range(len(df)):
   arr = []
   for j in range(1,len(df.iloc[i])):
       arr.append(df.iloc[i,j])
   dist_matrix.append(list(arr))
X = np.asarray(dist_matrix)
labelss = list(df.columns.values)
Z = sch.linkage(X, 'ward')
cl = {"a":"#21CF2B","b":"#FF5733","c":"#808080","d":"#21CF2B","e":"#61ffff",
      "f":"#FF5733","g":"#000000","h":"000000","i":"#61ffff","j":"#61ffff"}
#red, orange, gray, green, cyan, orange, black, black, cyan, cyan
link_cols = {}
three = list(np.rot90(Z)[3])
colors = list(cl.values())
for i, i12 in enumerate(Z[:,:2].astype(int)):
    c1 = None
    for x in i12:
        index = three.index(i12[0])
        c1 = colors[index]
        link_cols[i+1+len(Z)] = c1
dendrogram = sch.dendrogram(Z=Z, labels=letters, color_threshold=None, link_color_func=lambda x: link_cols[x])
plt.show()

看起来像这样。标签与颜色不对应。如何获得与颜色相对应的标签,并使上方链接变为黑色或其他颜色? enter image description here

0 个答案:

没有答案