用matplotlib绘制更新的树状图

时间:2017-09-05 11:38:02

标签: python

我使用dendogram中的scipy.cluster.hierarchy函数生成树形图。我创建了树形图并使用它绘制它:

linkage_matrix = ward(dist) 
dendrogram(linkage_matrix, orientation="left", labels=names) 

plt.tight_layout()
plt.show()

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

  1. 使用此处提及的leaf_label_funchere
  2. 但这不太好用。我收到n不存在的错误,实际上是True。函数中没有n

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

          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),新的叶子名称似乎就在那里。我在这做错了什么?

1 个答案:

答案 0 :(得分:0)

更新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)