2016-01-17 57 views
2

我正在使用python 2.7.9。
我使用scipy.cluster.hierarchy.dendrogram來顯示我的聚類結果。 Dendrogram here。一個問題是,我有大約200個數據。我看不清他們的標籤。如何使用樹狀圖處理大量數據

... 
z=linkage(dist, method='complete') 
R=dendrogram(z, labels=mylabels) 

enter image description here

1.I知道R["ival"]具有對應於葉節點的標籤,但它不是一個容易的工作,在如此密集的圖形匹配值和數據。

2.我想提取一部分數據。例如,左側的綠色鏈接。在這個尺度上,標籤可以清晰地看到。我認爲這是一種非常靈活的分析數據的方式。但我不知道該怎麼做。

3.我用leaf_label_func。我的目標是:當一個數據真的屬於一個類時,例如杯子顯示其名稱/標籤的一部分。例如,如果一個模型的名稱爲「cups_b1」,則只顯示「b1」。所以,至少我可以看到一次我的數據類別的位置。

def llf(id): 
    if id< nmodels: 
    mylabel=labels[id] 
    if mylabel.find("cups")!=-1: 
     index=mylabel.find("_") 
     outlabel=mylabel[index+1:] 
     return outlabel 
    else: 
     return "" #without the else part the function will return None, and that makes the output figure strange 
R=dendrogram(z, leaf_label_func=llf, leaf_rotation=90) 

但即使如此,我無法識別標籤。

enter image description here

回答

0

是不是真的有一個偉大的方法,以在視覺上提取的小細節出樹狀圖的。想到一對夫婦的解決方案。

使用圖外的集羣數據。

from collections import defaultdict 

clusterdict = defaultdict(list) 
for ind,clust in zip(R['leaves'],R['color_list']): 
    clusterdict[clust].append(ind) 

現在您可以單獨探索每個羣集。

In [50]: 
clusterdict['g'] 

Out[50]: 
[73, 8, 30, 14, 0, 67, 91, 60, 81, 61, 83, 22] 

另一種選擇是打印在如由代碼here兩軸(X,Y)的系統樹圖。然後,如果您絕對必須在圖表上看到標籤,您可以在x軸上打印一半標籤,在y軸上打印一半標籤。