我正在使用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()