2017-09-05 168 views
2

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

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/scipy.cluster.hierarchy.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),新叶的名字似乎是在那里。我在这里做错了什么?

+0

你需要与其他种类的情节在这里更新您的情节一个例子,但逻辑应该是相同的:https://开头计算器/ 45946607/animation-doesnt-work-in-python/45946682#45946682 – Dadep

+0

我试过了,似乎不起作用。你能告诉我在我的代码中使用这个位置吗? @Dadep – ifreak

回答

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) 
+0

这不适用于我的代码,我能够让你的代码工作,但是当我尝试将它应用于我的代码时,第二次绘制什么都不做。 – ifreak

+0

你可以用你试过的东西编辑你的文章吗?问题应该来自您修改树形图的方式。 – Dadep

+0

我修改了for循环中的树状图,如我的文章所示。我在更新树状图之前和之后添加了一个绘制,第一个工作,第二个不工作。 – ifreak