用matplotlib绘制更新的树状图



我使用scipy.cluster.hierarchydendogram函数生成了一个树状图。我创建树状图并使用以下方式绘制它:

linkage_matrix = ward(dist) 
dendrogram(linkage_matrix, orientation="left", labels=names) 
plt.tight_layout()
plt.show()

到目前为止,一切正常。我想做的是更新树状图的叶标签,并绘制新的树状图。我尝试了两种方法:

  1. 使用leaf_label_func如下所述:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/generated/scipy.cluster.hierarchy.dendragram.dendrogram.html

,但这效果不佳。我遇到了一个错误,即n不存在,这实际上是正确的。功能中没有n

  1. 手动更新名称的树状图列表,然后将其添加到树状图中。

`

    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)

最新更新