Python3 - ヒープをnetworkxではなくgraphvizで書いてみる
networkxだときれいに表示できない。posに表示スタイルを設定するようですが、spring_layout、spectral_layout、shell_layoutとかありますが、全部キレイな木を表示してくれる感じじゃない。外部のdotファイルとかいうのを読み込むとできるようですが、graphvizというのがあるので、そっちをやってみます。
Networkxの場合
import networkx as nximport matplotlib.pyplot as plt
h = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]G = nx.Graph()G.add_nodes_from(h)for i, _ in enumerate(h): if(i - 1) // 2 >= 0: G.add_edge(h[(i - 1) // 2], h[i])pos = nx.spring_layout(G)nx.draw_networkx(G, pos, with_labels=True)plt.axis("off")plt.show()
Graphvizの場合
インストール
ここからGraphvizをダウンロードしてインストールします。 その後、下記のようにpipインストールします。
$ pip install graphvizあと、windows10ですが、pathを通す必要がありました。インストールしたフォルダのbinをフォルダのパスを通してください。
サンプルコード
from graphviz import Graph
h = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]G = Graph(format='png')G.attr('node', shape='circle')for i in h: G.node(str(i))for i, _ in enumerate(h): if(i - 1) // 2 >= 0: G.edge(str(h[(i - 1) // 2]), str(h[i]))print(G)G.render('heap')