2017-10-21 3 views
2

私はこのような私の端末に表示するであろう単純なテキスト樹形図といくつかのデータをプロットするために(それらの距離によって国のグループ)をしようとしています:端末にシンプルテキストの樹状図を表示する方法は?

   ---- Monaco 
     ----| 
       ---- Croatia 
      ----| 
       ---- Montenegro 
    ----| 
      ---- Serbia 
     ----| 
      ---- Slovenia 
----| 
      ---- Austria 
     ----| 
       ---- Switzerland 
      ----| 
       ---- Germany 
    ----| 
        ---- Belgium 
       ----| 
         ---- Netherlands 
        ----| 
         ---- France 
      ----| 
        ---- Sweden 
       ----| 
         ---- Denmark 
        ----| 
         ---- Norway 

私が持つクラスタの組の行列に格納されたデータを持っていますその距離は、draw_clustersと呼ばれ、それがこのようなものになります。これまでのところ、私はこのコードを書いたが、私はそれは、端末にテキストの樹形図をプロットなるように再帰関数を呼び出す方法がわからない

['Monaco', [[[[['Croatia ', 'Montenegro ', 1.9148542155126762], ['Serbia ', 'Slovenia ', 2.469532658074352], 2.6659130840453282], ['Austria ', ['Switzerland ', 'Germany', 1.8487591643481294], 2.843561940573178], 3.3080033351363003],['...', '...']...[...]] 

を:

def draw_dendrogram(draw_clusters): 
    for cluster in range(len(draw_clusters)): 
     dendrogram(draw_clusters[cluster], 0, 0, 0) 

def dendrogram(cluster, x, y, distance): 
    node = "|" 
    vertical_line = "---" 

    print(cluster) 

私はPythonの初心者であり、どのように再帰がうまくいかないのか分からないので、助けてくれる人はいらっしゃいますか?

+0

はこれです常にバイナリツリーですか?何らかの形で使用されるすべてのリストの3番目の数値ですか?短くて切り詰められていない行列の例を与えることができますか? –

答えて

1

私は少しあなたのマトリックスの構造と混同していました。だから私は、すべてのリストがバイナリノードを表しているように、いくつかの仮定をする必要があった。最初の2つの値は新しいノードにつながり、3番目の数値はあなたのデンドログラムでは使用されない。

以下は、有効な行列の場合:

mat = [ 
     [ ['Croatia ', 'Montenegro ', 1.9148542155126762], 
      ['Serbia ', 'Slovenia ', 2.469532658074352], 
      2.6659130840453282], 
     ['Austria ', 
      ['Switzerland ', 'Germany', 1.8487591643481294], 
      2.843561940573178], 
     4.5656] 

あなたは簡単にそれが持つ系統樹だ印刷することができます。このような出力を生成します

def print_node(data,spaces = ""): 
    if type(data)==type([]): 
     print_node(data[0],spaces+" "*5) #here is first recursive call 
     print(spaces,"----|") 
     print_node(data[1],spaces+" "*5) #second recursive call 
    else: 
     print(spaces,"----",data) 

   ---- Croatia 
      ----| 
       ---- Montenegro 
     ----| 
       ---- Serbia 
      ----| 
       ---- Slovenia 
----| 
      ---- Austria 
     ----| 
       ---- Switzerland 
      ----| 
       ---- Germany 
関連する問題