2017-09-05 164 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