我使用scipy.cluster.hierarchy
的dendogram
函数生成了一个树状图。我创建树状图并使用以下方式绘制它:
linkage_matrix = ward(dist)
dendrogram(linkage_matrix, orientation="left", labels=names)
plt.tight_layout()
plt.show()
到目前为止,一切正常。我想做的是更新树状图的叶标签,并绘制新的树状图。我尝试了两种方法:
- 使用
leaf_label_func
如下所述:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/generated/scipy.cluster.hierarchy.dendragram.dendrogram.html
,但这效果不佳。我遇到了一个错误,即n
不存在,这实际上是正确的。功能中没有n
。
- 手动更新名称的树状图列表,然后将其添加到树状图中。
`
linkage_matrix = ward(dist)
dend = dendrogram(linkage_matrix, orientation="left", labels=names)
leaf_names = dend['ivl']
for idx, item in enumerate(leaf_names):
if 'c' in item:
item = item+'_c'
leaf_names[idx] = item
if 'i' in item:
item = item+'_i'
leaf_names[idx] = item
dend['ivl'] = leaf_names
plt.tight_layout()
plt.show()
`
但是,显示的绘图仍然是树状图的较旧版本,但是如果我 print(dend)
,新的叶子名称似乎就在那里。我在这里做错了什么?
更新dendogram
的示例您可以适应您的需求:
from matplotlib import pyplot as plt
from scipy.cluster.hierarchy import dendrogram, linkage
import numpy as np
from pylab import *
import time
ion()
for i in range(10):
#update here your dendogram values :
dist=[12.12,15.485,18.45,4.4,13.684,float(i+1)]
Z=linkage(dist)
# calculate it again :
dendrogram(Z, orientation="left")
# draw it again :
draw()
#wait 1 second between two update :
pause(1)